NavigationView 顶部的额外空间
Posted
技术标签:
【中文标题】NavigationView 顶部的额外空间【英文标题】:NavigationView Extra Space at Top 【发布时间】:2020-11-13 10:58:16 【问题描述】:我已将 NavigationBar 添加到我的共享扩展中。添加 NavigationView 后,顶部会出现一个额外的空间(下图)。
其他答案建议删除 NavigationView.. 没有它,导航栏不会显示。
如何在保留 NavigationBar 的同时删除此空间?
class ShareViewController: UIViewController
override func viewWillAppear(_ animated: Bool)
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = true
override func viewDidLoad()
super.viewDidLoad()
self.view.backgroundColor = .white
let vc = UIHostingController(rootView: TempView())
self.addChild(vc)
self.view.addSubview(vc.view)
vc.didMove(toParent: self)
vc.view.translatesAutoresizingMaskIntoConstraints = false
vc.view.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
vc.view.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
vc.view.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
vc.view.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
vc.view.heightAnchor.constraint(equalTo: self.view.heightAnchor).isActive = true
vc.view.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
vc.view.backgroundColor = UIColor.clear
import SwiftUI
struct TempView : View
var body: some View
NavigationView
VStack
Text("Ok")
Spacer()
.navigationBarTitle("Title", displayMode: .inline)
.edgesIgnoringSafeArea(.top)
.navigationBarItems(
leading:
Text("Close"),
trailing:
Text("Next")
)
【问题讨论】:
如果你使用 SwiftUI NavigationView 你不应该通过 UIKit 设置 UINavigationBar,它们不会被合并。相反,要么只使用 NavigationView,要么尝试在显示 NavigationView 之前修改 UINavigationBar.appearance()。 @Asperi 感谢您的快速回复。有趣的是,如果我清除 viewWillAppear 并添加 navigationController?.navigationBar.height = true 那么 SwiftUI NavigationView 栏适当地没有空间。但是,如果我链接到另一个视图,那么很遗憾该栏不会出现。 【参考方案1】:对不起,我的阅读不匹配,您正在尝试在扩展中使用 swiftui?我会推荐使用 ViewControllers。无论如何尝试删除导航视图
struct TempView : View
var body: some View
// NavigationView
VStack
Text("Ok")
Spacer()
.navigationBarTitle("Title", displayMode: .inline)
.edgesIgnoringSafeArea(.top)
.navigationBarItems(
leading:
Text("Close"),
trailing:
Text("Next")
)
//
【讨论】:
感谢您的评论,如果您取出 NavigationView 栏不显示.. 因为您要添加两个。一个是您在 viewWillAppear 中配置的第一个导航控制器,另一个是导航视图中的导航控制器。我建议您在视图控制器中添加关闭和下一步按钮的功能,请阅读此链接,如果成功,请给我一个有效的答案。 diamantidis.github.io/2020/01/11/share-extension-custom-ui 感谢您的链接,我想尝试弄清楚如何使用 SwiftUI 执行此操作。我注释掉 viewWillAppear 配置一个空格仍然是这样的:imgur.com/a/31xVBem 我不确定我的观点是否正确。您正在向视图中添加 2 个导航控制器,一个是视图控制器上的一个,另一个是导航视图。您只是在 viewWillAppear 中配置它。 再次感谢您澄清和分享该链接。我会标记你的回答,因为它有效。对于其他人,我现在可行的解决方案是隐藏 UIKit 导航栏,然后使用 SwiftUI NavigationView 和默认 NavigationLink(即没有编程选择和 EmptyView() 实现)以上是关于NavigationView 顶部的额外空间的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftUI 消除嵌套 NavigationView 中的空间