小编paw*_*222的帖子

SwiftUI 在 NavigationLink 视图中隐藏 TabView 栏

我有一个 TabView 和每个 Tab 项的单独 NavigationView 堆栈。它运行良好,但是当我打开任何 NavigationLink 时,仍会显示 TabView 栏。我希望它在我点击任何 NavigationLink 时消失。

struct MainView: View {
    @State private var tabSelection = 0

    var body: some View {
        TabView(selection: $tabSelection) {
            FirstView()
                .tabItem {
                    Text("1")
                }
                .tag(0)
            SecondView()
                .tabItem {
                    Text("2")
                }
                .tag(1)
        }
    }
}

struct FirstView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: FirstChildView()) { // How can I open FirstViewChild with the TabView bar hidden?
                Text("Go to...")
            }
            .navigationBarTitle("FirstTitle", displayMode: .inline)
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-tabview swiftui-navigationview

7
推荐指数
4
解决办法
3821
查看次数

在 SwiftUI 的列表中包含 TextEditor 的动态行高

我有一个List包含TextEditor

struct ContentView: View {
    @State var text: String = "test"

    var body: some View {
        List((1...10), id: \.self) { _ in
            TextEditor(text: $text)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它的项目并没有随着TextEditor. 我试过.fixedSize()修饰符但没有运气。我在这里缺少什么?

swift swiftui

7
推荐指数
2
解决办法
3681
查看次数

iOS 14 小部件中的动画

我找不到在 Widget 中实现某种 ProgressBar 的解决方案。我明白了,例如,如果类型为 .timer,则应该更改 Text 组件。我看到默认的小部件时钟,带有漂亮的移动箭头动画。但是我可以在小部件中实现自定义动画吗?

widget swift widgetkit swiftui ios14

7
推荐指数
1
解决办法
2278
查看次数

如何让 WidgetKit 上的现有条目保持刷新?

我正在HealthKit我的小部件中使用数据。如果手机被锁定,则无法获取HealthKit数据,除非手机解锁。但是,即使手机被锁定,我的小部件时间线也会尝试更新。

是否有可能以某种方式返回空完成,因此它将保持当前小部件数据不变?

这是我的代码:

struct Provider: IntentTimelineProvider {
    private let healthKitService = HealthKitService()
    func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
        let currentDate = Date()
        let refreshDate = Calendar.current.date(byAdding: .minute, value: 5, to: currentDate)!
        
        healthKitService.getHeartRate() { data, error in
            
            //Create an empty entry
            var entry = SimpleEntry(date: currentDate, configuration: ConfigurationIntent(), data: nil)

            //If no errors, set data
            if(error == nil) {
                entry.data = data
            } else {
                print(error) //this runs when a …
Run Code Online (Sandbox Code Playgroud)

ios swift healthkit widgetkit swiftui

7
推荐指数
1
解决办法
1005
查看次数

SwiftUI NavigationLink 错误(SwiftUI 在推送导航链接时遇到问题。请提交错误。)

控制台错误: SwiftUI 在推送导航链接时遇到问题。请提交错误。

NavigationLink 中不使用 isActive 参数是没有问题的。但是,我必须使用 isActive 参数。因为我相应地关闭了下拉列表。

菜单型号:

struct Menu: Identifiable {
    var id: Int
    var pageName: String
    var icon: String
    var page: Any
    var startDelay: Double
    var endDelay: Double
//    var offsetY: CGFloat
}

let menu = [
    Menu(id: 1, pageName: "Profil", icon: "person.crop.circle", page: ProfileView(), startDelay: 0.2, endDelay: 0.6),
    Menu(id: 2, pageName: "Sepet", icon: "cart", page: CartView(), startDelay: 0.4, endDelay: 0.4),
    Menu(id: 3, pageName: "?stek", icon: "plus.circle", page: ClaimView(), startDelay: 0.6, endDelay: 0.2)
]
Run Code Online (Sandbox Code Playgroud)

菜单视图

struct …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink

7
推荐指数
1
解决办法
1699
查看次数

如何调试 SwiftUI Widget 内存问题?

我正在 swiftui 中创建一个小部件,其中包含预填充的模拟 json,存储在本地。

模拟 JSON 有以下数据:

{
    "id":"111",
    "title":"some dummy title",
    "date":"1609865285",
    "thumbnail":"mock4"
}
Run Code Online (Sandbox Code Playgroud)

并且mock4图像存储在Assets文件夹中。

我在时间线方法中加载模拟数据,如下所示:

for mockItem in storyManager.getMockData() {
    let item = WidgetFeedItem(newsData: mockItem)
    items.append(item)
}
let entry = FeedItemEntry(date: Date(), items: entries)
if let nextDate = Calendar.current.date(byAdding: .minute, value: 15, to: Date()) {
    let timeline = Timeline(entries: [entry], policy: .after(nextDate))
    completion(timeline)
 }


 struct WidgetFeedItem: Hashable {
    var newsTitle = ""
    var newsDate = Date()
    var newsID = ""
    var newsimageURL = ""
    var articleLink = "" …
Run Code Online (Sandbox Code Playgroud)

xcode-instruments swift widgetkit swiftui ios14

7
推荐指数
1
解决办法
872
查看次数

onDelete() 函数处理程序如何在 swiftUI 列表中工作?

所以我知道以下代码有效:

struct ContentView: View {
    func removeRows(at offsets: IndexSet) {
        numbers.remove(atOffsets: offsets)
    }
    
    @State private var numbers = [Int]()
    @State private var currentNumber = 1

    var body: some View {
        VStack {
            List {
                ForEach(numbers, id: \.self) {
                    Text("\($0)")
                }
                .onDelete(perform: removeRows)
            }

            Button("Add Number") {
                self.numbers.append(self.currentNumber)
                self.currentNumber += 1
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白的是removeRows(at offsets: IndexSet)自定义函数处理程序是如何.onDelete()工作的。at具体来说,为什么前面有一个参数标签offsets:。您可以使用on代替at例如吗?参数标签只是为了让我们更好地理解代码吗?

然后,IndexSet我认为我将其理解为一种类型,它保存用于索引目的的 Int 或用于删除列表中的行的 Int 范围,以便 swiftui 知道要删除哪一行?

我想我理解numbers.remove(atOffsets: …

swift swiftui

6
推荐指数
1
解决办法
3808
查看次数

SwiftUI 绑定 bool 外部视图 - “访问安装在视图之外的状态值”

我试图在一个简单的测验(例如示例)中将逻辑与用户界面分开。但当我回答完问题后,我正在努力思考如何离开。

在 Xcode 12 中我收到错误:

访问安装在视图之外的状态值。这将导致 Binding 的初始值恒定并且不会更新。

我从其他答案中看到@State只能在struct中使用,建议发布。但我似乎无法弄清楚如何使用已发布的属性与其绑定而不是“安装在视图上”

class ViewModel: ObservableObject {
    @Published var currentQuestion: String!

    private var questions = ["one", "two", "three"]
    private var index = 0

    init() {
        currentQuestion = questions[index]
    }

    func button(title: String) -> some View {
        Button(action: { [self] in
            if index < questions.count {
                index += 1
                currentQuestion = questions[index]
            } else {
                print("go to results view")
            }
        }) {
            Text(title)
        }
    }
}

struct ContentView: View {
    @ObservedObject var viewModel = ViewModel() …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

6
推荐指数
1
解决办法
9633
查看次数

如何在 iOS 14 Home Widget 中显示当前时间(实时)

我正在为 ios 14 Home Widget 开发一个应用程序,在显示当前时间(数字时钟)时遇到一个问题,即该小部件没有每秒更新。众所周知,苹果不允许每秒触发时间线,有没有其他方法可以实时更新显示当前时间?

我尝试了这些方法,但没有按预期工作

class NetworkManager: ObservableObject {
    @Published var dateIs = Date()
    
    init() {
        startTimer() // fetch data must be called at least once
    }
    private  func startTimer() { 
        let t = RepeatingTimer(timeInterval: 3)
                t.eventHandler = {
                    DispatchQueue.main.async() {
                        // your UI update code
                        print("Timer Fired")
                     self.dateIs = Date()
                        WidgetCenter.shared.reloadAllTimelines() // reload timelines
                    }
                    if(false){   //I know this makes no sense, but it works. Go figure...
                        t.suspend()
                    }
                }
                t.resume()

    }
}


struct Provider: TimelineProvider { …
Run Code Online (Sandbox Code Playgroud)

widget swift widgetkit swiftui ios14

6
推荐指数
1
解决办法
5798
查看次数

如何以编程方式从 UIViewRepresentable 触发 UIMenu

我尝试创建一个自定义 SwiftUI 菜单(基于UIMenu)。

但是,我无法触发主要操作。

当我点击时它会起作用CustomMenu,但不会触发程序操作。我究竟做错了什么?

struct CustomMenu: UIViewRepresentable {
    let title: String
    @Binding var isPresented: Bool

    func makeUIView(context: Context) -> UIButton {
        let button = UIButton(type: .system)
        button.setTitle(title, for: .normal)
        button.menu = UIMenu(title: "", options: .displayInline, children: [
            UIAction(title: "Item 1", image: UIImage(systemName: "mic"), handler: { _ in }),
            UIAction(title: "Item 2", image: UIImage(systemName: "envelope"), handler: { _ in }),
            UIAction(title: "Item 3", image: UIImage(systemName: "flame.fill"), handler: { _ in }),
            UIAction(title: "Item 4", …
Run Code Online (Sandbox Code Playgroud)

swift swiftui uiviewrepresentable uimenu

6
推荐指数
0
解决办法
2134
查看次数