3

我有一个UIViewController具有以下结构的:

查看 -> ScrollView -> 查看 -> 各种东西

我读到最好将“各种东西”放在滚动视图内的视图中。在我不得不支持 iPhone 5 并使用 AutoLayout 之前,一切都运行良好。现在滚动视图已成为我存在的祸根。

如何让滚动视图正确滚动?我已经尝试了各种方法,但它只是无法正常工作,或者如果它正常工作,它会不断地滚动到顶部,或者在导航回屏幕时内容偏移是错误的。

目前我有以下使滚动视图半工作:

public override void ViewDidLayoutSubviews()
{
    base.ViewDidLayoutSubviews();
    View.LayoutIfNeeded();
    scrollView.ContentSize = scrollView.Subviews[0].Frame.Size;
}

使用 AutoLayout 执行此操作的正确方法是什么?应该没那么难!必须有一种方法可以通过 IB 或代码来实现它...

4

4 回答 4

1

该功能是不必要的。如果您使用的是 IB,请确保 UIScrollView 的“底部空间到:视图”约束等于默认值。您可以通过在编辑约束时选中“标准”复选框来做到这一点。

如果您从起始位置滚动,导航到另一个页面并返回,UIScrollView 仍然会表现得很奇怪。您可以通过在 ViewWillAppear 中将 UIScrollView 的 contentOffset 重置为 (0, 0) 来解决此问题:

public override void ViewWillAppear(bool animated)
    {
        base.ViewWillAppear(animated);
        scrollView.ContentOffset = new PointF(0, 0);
    }
于 2013-07-30T08:04:49.253 回答
0

所以,这是你需要做的,让UIScrollViewAutoLayout 很好地协同工作:

  • 创建一个UIScrollView并将约束附加到其父视图
  • 添加您的子视图。AutoLayout要能够知道contentView的大小,需要从上到下,从左到右的约束。解决此问题的另一种(更简单但不太漂亮)的方法是将 a 添加UIView到滚动视图并固定其宽度和/或高度。将 的真实内容添加UIScrollViewUIView.

该系统很棒,一旦你掌握了它。祝你好运!

于 2013-07-04T22:41:35.733 回答
0

最好的方法是在 viewDidAppear 设置 contentSize,这样你就可以否定自动布局的效果。

-(void)viewDidAppear:(BOOL)animated
{
     [super viewDidAppear:animated];
     [yourScrollView setContentSize:(CGSizeMake(320, 400))];
}
于 2014-09-23T11:05:32.477 回答
0

我认为你在那里进行的那个功能是不必要的,关于自动布局系统试图用你的视图完成什么,你可能缺少一些东西。

搜索了一圈后,我发现了几个线程。

就是这样,接受的解决方案是在布局使用viewDidLayoutSubviews. 看起来很hacky。

总的来说,这里是对您在 AutoLayout 中使用 ScrollViews 所做的一个很好的一般描述,他链接到iOS 6 发行说明(搜索 UIScrollView),其中 Apple 提供了几个如何正确制作 ScrollViews 的示例。我相信你将能够处理它。

此外,虽然从您的问题中并不完全清楚,但如果您认为您的某些布局约束可能正在破坏,您可以在调试器中看到此输出 - 很好的大块语句准确地说明了哪些约束不能满足以及为什么,哪个,经过一番破译,可能会指出你问题的根源。这可能根本不相关,因为听起来您根本没有使用该系统,但您可能没有数据。

祝你好运!

于 2013-07-05T02:02:44.153 回答