UIScrollView 帧正在自动移动



我有一个UIScrollView,里面有一个UIView。我已经在情节提要编辑器中将此UIScrollView定位在屏幕的一半左右。默认情况下,它显示在应有的位置,但在我运行应用时不会响应用户交互。如果我取消选中情节提要的自动布局,交互将起作用,但视图会自动移动到屏幕顶部。或者,我可以保持自动布局处于选中状态,并在我的视图DidLoad中插入以下代码:

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]];

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

解决方法是将滚动视图放在位于所需位置的通用 UIView 中。

它位于屏幕顶部(并且是屏幕的大小),因为这是您在约束中告诉它要执行的操作:

[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]];

最新更新