3

我有一个UIViewController其具有如下结构不起作用:的UIScrollView与自动版式预期

查看 - >滚动型 - >查看 - >的东西种种

,我读了它最好的将“各种各样的东西”放入scrollview视图中。一切工作完美,直到我不得不支持iPhone 5并使用AutoLayout。现在scrollviews已经成为我存在的祸根。

我怎样才能让scrollview正常滚动?我尝试过所有方式的东西,它只是不能正常工作,或者如果它工作,它总是想要滚动到顶部,或者在导航回到屏幕时,内容偏移量是错误的。

目前,我有以下进行滚动视图半工作:

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

什么是这样使用的自动版式的正确方法是什么?它没有这么难!必须有一种方式与IB权利或代码来得到它...

+0

是由'scrollView.Subviews [0] .Frame.Size'正确的大小(即,大到足以需要滚动来解决)中产生的值? –

+0

是的,内部视图在IB中的大小完美,可以容纳所有的字段。没有自动布局的情况下,scrollview的内容大小是在ViewDidLoad方法中设置的,而且事情完美无缺。 – Dylan

回答

1

该功能是不必要的。如果您使用IB,请确保UIScrollView的“Bottom Space to:View”约束等于Default。您可以通过在编辑约束时选中“标准”复选框来完成此操作。

如果您从起始位置滚动离开,导航到另一个页面并导航回来,UIScrollView仍然会表现异常。您可以通过重置UIScrollView的contentOffset为(0,0)viewWillAppear中解决这个问题:

public override void ViewWillAppear(bool animated) 
    { 
     base.ViewWillAppear(animated); 
     scrollView.ContentOffset = new PointF(0, 0); 
    } 
+0

由于某些未知原因,将底部空间设置为查看默认值可以修复绝大多数问题。谢谢大卫。 – Dylan

0

所以,这是你需要做的就是UIScrollView和自动版式很好地协同工作的内容:

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

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

0

我认为你在那里进行的功能是不必要的,这可能是你错过了Autolayout系统试图用你的视图完成的事情。

经过搜索后,我发现了一些线程。

this,其中接受的解决方案是通过使用viewDidLayoutSubviews改变contentSize 布局。似乎哈克。

总体而言,here是你与ScrollViews在自动版式做一个很好的一般性描述,他链接到the iOS 6 release notes(搜索的UIScrollView),其中苹果给出了如何正确地做ScrollViews几个例子。我相信你可以用它来处理它。另外,虽然从你的问题来看并不完全清楚,但如果你认为可能有一些布局约束被破坏了,你可以在调试器中看到这个输出 - 很好的大块语句正好说明了什么约束不能满足以及为什么,经过一番解密后,可能会指出问题的根源。这可能根本不相关,因为听起来你根本就没有使用系统,但它可能是你没有的数据。

祝你好运!

0

最好的办法是在viewDidAppear所以你否定的自动版式的效果设置contentSize。

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [yourScrollView setContentSize:(CGSizeMake(320, 400))]; 
}