我有一个简单的TabView:
TabView {
NavigationView {
VStack {
NavigationLink(destination: Text("Detail")) {
Text("Go to detail")
}
}
}
.tabItem { Text("First") }
.tag(0)
Text("Second View")
.tabItem { Text("Second") }
.tag(1)
}
Run Code Online (Sandbox Code Playgroud)
当我转到选项卡1上的详细信息视图时,切换到选项卡2,然后再切换回选项卡1,我假设将返回到详细信息视图(iOS中随处可见的基本UX)。而是重置为选项卡1的根视图。
由于SwiftUI并不希望立即提供支持,因此该如何解决呢?
交互式弹出手势识别器应允许用户在滑过屏幕的一半以上(或这些行周围的内容)时返回导航堆栈中的上一个视图。在SwiftUI中,如果滑动距离不够远,手势不会被取消。
SwiftUI: https ://imgur.com/xxVnhY7
UIKit: https ://imgur.com/f6WBUne
题:
使用SwiftUI视图时能否获得UIKit行为?
尝试次数
我试图将UIHostingController嵌入UINavigationController内,但其行为与NavigationView完全相同。
struct ContentView: View {
var body: some View {
UIKitNavigationView {
VStack {
NavigationLink(destination: Text("Detail")) {
Text("SwiftUI")
}
}.navigationBarTitle("SwiftUI", displayMode: .inline)
}.edgesIgnoringSafeArea(.top)
}
}
struct UIKitNavigationView<Content: View>: UIViewControllerRepresentable {
var content: () -> Content
init(@ViewBuilder content: @escaping () -> Content) {
self.content = content
}
func makeUIViewController(context: Context) -> UINavigationController {
let host = UIHostingController(rootView: content())
let nvc = UINavigationController(rootViewController: host)
return nvc
}
func updateUIViewController(_ uiViewController: UINavigationController, …
Run Code Online (Sandbox Code Playgroud) 我正在使用 ForEach 创建一个循环。但是,我想根据循环计数有条件地渲染一个 Rectangle 。例如,如果最后一次循环迭代,则不要渲染矩形。
什么是正确的语法?
我正在寻找这样的东西(非工作伪代码)
ForEach(arrayOfThings, id: \.title) { thing in
// Stuff that happens on every iteration of loop
// Conditional section
if (thing.endIndex-1) {
Rectangle()
.frame(width: 100, height: 1, alignment: .bottom)
.foregroundColor(Color("666666"))
}
}
Run Code Online (Sandbox Code Playgroud)
我知道有一些类似的东西,for (offset, element) in array.enumerated() { }
但你不能在视图中使用它们。我想知道 ForEach 中是否有一个方便的功能来解决这个需求?
目前我正在这样做以解决方法:
ForEach(0..<arrayOfThings.count) { i in
// Stuff that happens on every iteration of loop
// Conditional section
if (i = self.arrayOfThings.count-1) {
Rectangle()
.frame(width: 100, height: 1, alignment: .bottom)
.foregroundColor(Color("666666"))
} …
Run Code Online (Sandbox Code Playgroud) 我正与一个拥有大型故事板的项目的多个人合作.为了使这个故事板更易于导航,我们考虑添加带有大UILabel的View Controllers来显示您正在查看的部分.
我收到警告""InfoLabel"无法访问,因为它没有入口点,并且......"但是项目仍在运行.
无法访问的View控制器会发生什么情况,以这种方式使用它们会有害吗?
编辑:我们不同时在这个项目上工作,所以合并对我来说不是问题.