如何在Swift 3中将edgesForExtendedLayout设置为none

41

问题是我的View中包含一个在ScrollView中的UIViewUITableView,如果设置为半透明,就会隐藏在UINavigationBar下面。

我已经考虑过类似这样的多个线程,但它们都建议设置:

self.edgesForExtendedLayout = UIRectEdgeNone

在 Swift 2 中,这段代码是:

self.edgesForExtendedLayout = .None

我今天已经更新至Xcode 8.1和Swift 3.0.1,但我在发行说明中找不到任何关于这个问题的内容。

编译器告诉我,.None已更改为.none,但修改后,.none不存在。将其更改为.top没有任何效果。

tableView是以编程方式设置的,并且放置insets并没有帮助,因为我有一个scrollView以及位于UITableView下方被UINavigationBar遮盖住的UIView

我错过了什么?非常感谢您的帮助。

4个回答

136

将其设置为[]。这与none相同。


我现在甚至需要等待10分钟才能接受你的答案。这已经有一段时间没有发生过了。问题:[]总是和.none一样吗?还是只在那种情况下?我找不到任何东西。 - David Seek
是的,[]与Matt所示的.none是相同的。 - Scott Corscadden

15
self.edgesForExtendedLayout = .init(rawValue: 0)

2

SWIFT 5解决方案

override func viewWillAppear(_ animated: Bool) {
   super.viewWillAppear(animated)

   self.edgesForExtendedLayout = []
}

2
请在您的答案中添加一些解释,以便其他人可以从中学习。 - Nico Haase

0

我不知道为什么,但我刚刚在我的viewDidLoad()中添加了以下代码,它解决了我的问题。

self.navigationController?.navigationBar.isTranslucent = false

3
强制改变导航栏的样式并不能解决这个问题。 - David Seek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接