【问题标题】:iOS 7 UIViewController (with navigation bar) doesn't inset UIScrollViewiOS 7 UIViewController(带导航栏)不插入 UIScrollView
【发布时间】:2013-09-30 04:32:50
【问题描述】:

我有一个 UINavigationController 和一个显示导航栏的 UIViewController。

我已经专门设置了[self setAutomaticallyAdjustsScrollViewInsets:YES];,尽管默认情况下应该是YES

我添加了一个 UIScrollView:

self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:self.scrollView];

但是,UIScrollView 的 contentInset 是 {0, 0, 0, 0},所以我想知道为什么它没有像文档中所说的那样从视图控制器继承 content inset。

如果我将子视图添加到滚动视图并将它们的 Y 设置为 self.scrollView.contentInset.top,它们不会出现在导航栏下方,这是我所期望的。

我在这里做错了什么?如果您从 UITableViewController 开始,它工作正常,因为它正确地从视图控制器继承 contentInset

谢谢!

【问题讨论】:

  • contentInset(和 contentOffset)调整只有在视图显示在屏幕上后才能看到。您能否确认它们仍未在viewDidAppear 或更高版本中设置?
  • 啊,这里可能有问题,我正在尝试将其设置为loadView
  • 啊,绝对不建议在 loadView 中做更多的事情,而不是创建和分配一些东西给 self.view
  • @jefflcy87 等等,所以我要设置self.view = scrollView?
  • @runmad 我之前的评论可能具有误导性。我的意思是您的视图层次结构必须是这样的。 View (self.view) --->ScrollView --->Other views 如果你在 self.view 和你的 scrollView 之间有任何东西 [setAutomaticallyAdjustsScrollViewInsets:] 将不起作用,即 View -->Other views (UIButton, UILabel, UIView 等) -->滚动视图

标签: ios uiviewcontroller uiscrollview ios7


【解决方案1】:

它调整滚动视图边界,而不是内容插入。

【讨论】:

  • 没有。我希望内容出现在导航栏等下方。如果您调整边界,您不会得到这个。
  • 为什么是-1?如果您查看 setAutomaticallyAdjustsScrollViewInsets:YES 时 scrollView 是如何受到影响的,您会看到边界会根据导航栏和/或状态栏的存在而改变。比如隐藏状态栏,你会看到bounds.origin.y变了20。如果是NO,那么bounds没有变。
  • UIScrollView 内的内容不会滚动到边界之外。但它会滚动到插图之外。我希望内容滚动到边界之外。
【解决方案2】:
self.view = self.scrollView;

对我来说很好用。 用 UIWebview 测试:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view = self.webView;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    相关资源
    最近更新 更多