UIScrollView框架被自动移动

时间:2013-11-15 00:14:22

标签: ios uiview uiscrollview autolayout

我有一个带有UIView的UIScrollView。我在故事板编辑器中将这个UIScrollView定位在屏幕的一半左右。默认情况下,它出现在应有的位置,但在我运行应用程序时不响应用户交互。如果我取消选中故事板的自动布局,则交互有效,但视图会自动移动到屏幕顶部。或者,我可以选中autolayout并在viewDidLoad中插入以下代码:

scrollView.translatesAutoresizingMaskIntoConstraints = NO;
noteContainer.translatesAutoresizingMaskIntoConstraints = NO;

NSDictionary *viewsDictionary;
viewsDictionary = NSDictionaryOfVariableBindings(scrollView, noteContainer);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[noteContainer]|" options:0 metrics: 0 views:viewsDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[noteContainer]|" options:0 metrics: 0 views:viewsDictionary]];

在这种情况下,滚动视图会响应交互,但会再次自动移动到屏幕顶部。非常令人沮丧。

2 个答案:

答案 0 :(得分:1)

解决方法是将scrollview放在一个通用的UIView中,该UIView位于你想要的位置。

答案 1 :(得分:1)

它会显示在屏幕的顶部(并且是屏幕的大小),因为这是你在约束中告诉它的内容:

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];

该约束表示滚动视图与屏幕的顶部和底部之间的距离为0。如果你想要它,从顶部说150点,并一直到底部,你应该有这个:

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-150-[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];