Ios 快捷菜单列表/目标导航栏标题重影
我在导航栏标题上遇到了一个奇怪的视觉错误。此swiftUI应用程序具有 包含列表视图和显示的详图视图的基本主视图/详图类型视图 使用导航链接。该详细视图是显示信息的文本列表 或页面处于编辑模式时的文本字段列表 当在编辑模式下的详细视图中,我滚动到列表中的底部项目,然后 编辑它,然后第一个视图上的navigationBarTitle有一个“细节”的幻影 导航第二个视图的Bartitle。如果不滚动,则不会出现重影。 通过滚动,我包括滚动,这样键盘就不会隐藏文本字段 如果我将详细视图navigationBarTitle更改为.inline,则问题几乎是一个问题 不易察觉的闪光,无永久残留。很明显,我会让它保持这种模式 但我当然更喜欢标准的iOS外观 我已经在实验中禁用了我能想到的每一个组合-没有乐趣 根目录列表:Ios 快捷菜单列表/目标导航栏标题重影,ios,xcode,swiftui,Ios,Xcode,Swiftui,我在导航栏标题上遇到了一个奇怪的视觉错误。此swiftUI应用程序具有 包含列表视图和显示的详图视图的基本主视图/详图类型视图 使用导航链接。该详细视图是显示信息的文本列表 或页面处于编辑模式时的文本字段列表 当在编辑模式下的详细视图中,我滚动到列表中的底部项目,然后 编辑它,然后第一个视图上的navigationBarTitle有一个“细节”的幻影 导航第二个视图的Bartitle。如果不滚动,则不会出现重影。 通过滚动,我包括滚动,这样键盘就不会隐藏文本字段 如果我将详细视图navigati
NavigationView {
List {
ForEach(myPhysicians, id: \.self) { mp in
NavigationLink(destination: PhysicianDetailView(physician: mp)) {
Text(mp.lastName ?? "no last name")
}
}
.onDelete { indexSet in
//standard core data delete process
}
}.navigationBarTitle("Physicians")
.navigationBarItems(
leading:
NavigationLink(destination: AddPhysicianView()) {
Image(systemName: "plus.circle.fill")
.font(.title)
},
trailing:
EditButton()
)//bar button items
}//nav
详细视图:
var body: some View {
DispatchQueue.main.async {
self.localFirstName = self.physician.wrappedFirstName
self.localLastName = self.physician.wrappedLastName
//bunch more...
}
return ZStack(alignment: .topTrailing) {
List {
VStack { //group 1
VStack (alignment: .leading) {
Text("First Name:")
.font(.system(size: 14))
.font(.subheadline)
if !showEditView {
Text("\(physician.wrappedFirstName)")
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.vertical, 5)
.textFieldStyle(RoundedBorderTextFieldStyle())
.font(.headline)
} else {
TextField("tf firstname", text: $localFirstName)
.modifier(TextFieldSetup())
}
}
VStack (alignment: .leading) {
Text("Last Name:")
.font(.system(size: 14))
.font(.subheadline)
if !showEditView {
Text("\(physician.wrappedLastName)")
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.vertical, 5)
.textFieldStyle(RoundedBorderTextFieldStyle())
.font(.headline)
} else {
TextField("tf lastname", text: $localLastName)
.modifier(TextFieldSetup())
}
}
//bunch more...
}//outer vstack
}//list
.frame(maxWidth: .infinity - 20)
//.navigationBarTitle("Detail",displayMode: .inline)
.navigationBarTitle("Detail")
.navigationBarBackButtonHidden(true)
.navigationBarItems(
leading:
Button(action: {
self.presentationMode.wrappedValue.dismiss()
}) {
if self.showEditView {
Text("Cancel")
} else {
Image(systemName: "arrowshape.turn.up.left.circle.fill")
.font(.title)
}
},
trailing:
Button(action: {
if self.showEditView {
self.saveEditedPhysicianToCoreData(physician: self.physician)
}
self.showEditView.toggle()
}) {
Image(systemName: self.showEditView ? "gear" : "square.and.pencil")
.font(.title)
.frame(width: 60, height: 60)
}
)//nav bar items
}//zstack
.modifier(AdaptsToSoftwareKeyboard())
}//body
任何指导都将不胜感激。Xcode 11.6 iOS 13.6
增补:2020年7月29日
struct AdaptsToSoftwareKeyboard: ViewModifier {
@State var currentHeight: CGFloat = 0
func body(content: Content) -> some View {
content
.padding(.bottom, self.currentHeight)
.edgesIgnoringSafeArea(self.currentHeight == 0 ? Edge.Set() : .bottom)
.onAppear(perform: subscribeToKeyboardEvents)
}
private let keyboardWillOpen = NotificationCenter.default
.publisher(for: UIResponder.keyboardWillShowNotification)
.map { $0.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! CGRect }
.map { $0.height }
private let keyboardWillHide = NotificationCenter.default
.publisher(for: UIResponder.keyboardWillHideNotification)
.map { _ in CGFloat.zero }
private func subscribeToKeyboardEvents() {
_ = Publishers.Merge(keyboardWillOpen, keyboardWillHide)
.subscribe(on: RunLoop.main)
.assign(to: \.self.currentHeight, on: self)
}
}
问题似乎出在
适配软件键盘,你能把它的代码拍下来吗?我在上面这样做了。我很确定我测试时禁用了这个功能,但我会再次这样做。禁用软件键盘适配器并不能消除这个问题。你认为修改器真的可以改变来解决这个问题吗?同时,我需要将这个和其他屏幕的导航从一个选项卡栏移到一个实用程序屏幕上-看起来SwiftUI中不能有超过5个选项卡-在“更多…”下的额外选项卡是空的。在研究和确认这个bug的过程中,我看到很多文章都在讨论使用滚动的视图中大标题的问题。这些评论可以追溯到很多年前。问题似乎出在软件键盘的适配器中,你会拍摄它的代码吗?我在上面这样做了。我很确定我测试时禁用了这个功能,但我会再次这样做。禁用软件键盘适配器并不能消除这个问题。你认为修改器真的可以改变来解决这个问题吗?同时,我需要将这个和其他屏幕的导航从一个选项卡栏移到一个实用程序屏幕上-看起来SwiftUI中不能有超过5个选项卡-在“更多…”下的额外选项卡是空的。在研究和确认这个bug的过程中,我看到很多文章都在讨论使用滚动的视图中大标题的问题。这些评论可以追溯到很多年前。