use*_*880 15 iphone status uiscrollview ios7
我正在开发我的应用程序以使用iOS7.我有一个UINavigationController我正在推动一个内部有ScrollView的UIViewController.在scrollView里面我有一个tableView.是否有可能实现这一点,当我在scrollView中滚动tableView时,列表将出现在状态栏后面.同样的原因,如果我有一个UINavigationController和一个带有tableView的UIViewController.
这就是层次结构:
UINavigationController
- > UIViewController
- > UIScrollView
- > UITableView
.
我希望当用户滚动表格时,顶部的单元格将在状态栏下显示.
如果没有,UIScrollView
它会在iOS7中自动发生.
谢谢.
小智 36
只需在viewController init方法中设置automaticallyAdjustsScrollViewInsets
即可NO
.
在Storyboard中,您可以在选择UIViewController时直接在属性面板中切换属性.
如果你使用xib,只需像这样设置:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self.automaticallyAdjustsScrollViewInsets = NO;
}
Run Code Online (Sandbox Code Playgroud)
注意:这是从iOS7开始,仍然在iOS8中.
Sko*_*oua 25
从iOS 11开始,您可以将此新属性与后备(Swift 4)一起使用:
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
}
else
{
self.automaticallyAdjustsScrollViewInsets = false
}
Run Code Online (Sandbox Code Playgroud)
Skoua 的答案可能在某些情况下有效,但在 iOS11 及更高版本上确实有某些副作用。最值得注意的是,滚动视图将开始向其子视图传播安全区域,如果您使用安全区域或布局边距,这可能会在滚动时弄乱您的布局。
Apple 在此 WWDC 会议中很好地详细解释了这一点,并且还明确提到可能contentInsetAdjustmentBehavior = .never
会产生副作用,并且在大多数情况下不应该使用它。
要获得一个不会弄乱我们的布局但在状态栏(或导航栏)下方显示其内容的滚动视图,您应该观察滚动视图的安全区域并相应地调整您的自定义内容插入:
private var scrollViewSafeAreaObserver: NSKeyValueObservation!
override func viewDidLoad() {
...
if #available(iOS 11.0, *) {
self.scrollViewSafeAreaObserver = self.scrollView.observe(\.safeAreaInsets) { [weak self] (_, _) in
self?.scrollViewSafeAreaInsetsDidChange()
}
} else {
self.automaticallyAdjustsScrollViewInsets = false
}
}
@available(iOS 11.0, *)
func scrollViewSafeAreaInsetsDidChange() {
self.scrollView.contentInset.top = -self.scrollView.safeAreaInsets.top
}
deinit {
self.scrollViewSafeAreaObserver?.invalidate()
self.scrollViewSafeAreaObserver = nil
}
Run Code Online (Sandbox Code Playgroud)
为什么这样做?因为我们离开了contentInsetAdjustmentBehavior = .automatic
。当涉及到滚动和非滚动轴时,这将为我们提供正常的行为,但 UIScrollView 也会将任何安全区域“转换”为内容插入。由于我们不希望在顶部边缘出现这种情况,我们只需将负顶部安全区域设置为我们的自定义插入,这将抵消滚动视图设置的任何插入。