我有UIViewController
,其结构如下:
查看 - >滚动型 - >视图 - >各种各样的东西
我认为最好将“各种各样的东西”放在scrollview中的视图中。一切都运作良好,直到我不得不支持iPhone 5并使用AutoLayout。现在,滚动视图已成为我存在的祸根。
如何让scrollview正确滚动?我已经尝试了各种各样的方式,它只是无法正常工作,或者如果它工作,它不断想要滚动到顶部或当导航回屏幕时内容偏移是错误的。
目前我有以下内容使scrollview半工作:
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
View.LayoutIfNeeded();
scrollView.ContentSize = scrollView.Subviews[0].Frame.Size;
}
使用AutoLayout执行此操作的正确方法是什么?它不是那么难!必须有一种方法可以用IB或代码来实现它......
答案 0 :(得分:1)
该功能是不必要的。如果您正在使用IB,请确保UIScrollView的“Bottom Space to:View”约束等于Default。您可以通过在编辑约束时选中“标准”复选框来执行此操作。
如果您从起始位置滚动,导航到另一个页面并导航回来,UIScrollView仍会表现得很奇怪。您可以通过在ViewWillAppear中将UIScrollView的contentOffset重置为(0,0)来解决此问题:
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
scrollView.ContentOffset = new PointF(0, 0);
}
答案 1 :(得分:0)
因此,您需要做的就是让UIScrollView
和AutoLayout很好地协同工作:
UIScrollView
并将约束附加到其父视图UIView
并固定其宽度和/或高度。将UIScrollView
的真实内容添加到UIView
。一旦掌握了它,系统就很棒了。祝你好运!
答案 2 :(得分:0)
我认为你在那里进行的功能是不必要的,关于Autolayout系统试图用你的观点完成什么,你可能会遗漏一些东西。
在搜索之后,我找到了几个线程。
有this,接受的解决方案是使用viewDidLayoutSubviews
更改布局后的contentSize 。看似hacky。
总的来说,here是对你在AutoLayout中使用ScrollViews做什么的一般描述,他链接到the iOS 6 release notes(搜索UIScrollView),其中Apple提供了几个如何正确制作ScrollViews的示例。我相信你能够用它处理它。
此外,虽然你的问题并不完全清楚,但如果你认为你的布局约束可能会破坏,你可以在调试器中看到这个输出 - 很好的大块语句准确说明不能满足哪些约束条件为什么,在经过一些破译后,可能会指出问题的根源。这根本不相关,因为听起来你根本就不使用系统,但它可能没有你的数据。
祝你好运!答案 3 :(得分:0)
最好的方法是在viewDidAppear设置contentSize,这样就可以否定autolayout的影响。
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[yourScrollView setContentSize:(CGSizeMake(320, 400))];
}