在我的应用程序中,我有一个 UISearchBar
在 UINavigationBar
下所以它总是对用户可见。在那种情况下,我必须设置 contentInset
额外的 44px 所以 UIScrollView
将在 UISearchBar
下滚动(就像在 Contacts.app 中一样)。并且静态UITableView
不会有问题的,但在我的情况下,我必须重新加载它的内容,切换到 UISearchDisplayController
等等所以当我打电话时:
[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)];
一切正常,直到例如我拉刷新...(为此我使用 SSPullToRefresh
)。
所以我的问题是:如何设置 contentInset
永久保存,因此我不必担心 UITableView
中的数据会发生任何变化?
最佳答案
这可能是我的某种错误,因为我弄乱了自动布局和 Storyboard ,但我找到了答案。
你必须在 View Controller 的 Attribute Inspector 中照顾这个小家伙
必须取消选中,以便在任何更改后不会设置默认的 contentInset
。
之后,它只是向 viewDidLoad
添加单行:
[self.tableView setContentInset:UIEdgeInsetsMake(108, 0, 0, 0)]; // 108 is only example
iOS 11、Xcode 9 更新
如果涉及到 iOS 11 和 Xcode 9,之前的解决方案似乎不再正确。 automaticallyAdjustsScrollViewInsets
已被弃用,现在要达到类似的效果,您必须转到 Size Inspector 在那里您可以找到:
此外,您可以在代码中实现相同的效果:
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
https://stackoverflow.com/questions/22020943/