添加到UIScrollView时,UIButton不会滚动

时间:2015-05-05 15:50:54

标签: ios objective-c autolayout

我已向UIButton添加了UILabelUIScrollView。我使用自动布局为按钮添加了两个约束,而没有添加到标签。我可以在屏幕上看到标签移动,但是我没有看到按钮移动。我认为这与我添加到按钮的自动布局约束有关。我希望看到按钮滚动的方式与我在窗口/屏幕上滚动标签的方式相同。

以下是我如何设置所有内容:

_welcomeScroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
_welcomeScroller.userInteractionEnabled = YES;
_welcomeScroller.scrollEnabled = YES;
_welcomeScroller.showsHorizontalScrollIndicator = YES;
_welcomeScroller.showsVerticalScrollIndicator = YES;
#ifdef DEBUG
[_welcomeScroller setBackgroundColor:[UIColor greenColor]];
#endif
[self.view addSubview:_welcomeScroller];
CGSize welcomeScrollerSize = CGSizeMake(2000, 2000);
[_welcomeScroller setContentSize:welcomeScrollerSize];

// add test label
_test = [[UILabel alloc] initWithFrame:CGRectMake(200, 200, 200, 200)];
[_test setText:@"TEST"];
[_test setFont:[UIFont systemFontOfSize:44]];
[_test setBackgroundColor:[UIColor redColor]];
[_welcomeScroller addSubview:_test];

// add about btn to lower right
_welcomeAbout = [UIButton buttonWithType:UIButtonTypeInfoDark];
[_welcomeAbout addTarget:self action:@selector(showAboutScreen:) forControlEvents:UIControlEventTouchUpInside];
[_welcomeAbout setTranslatesAutoresizingMaskIntoConstraints:NO];
[_welcomeScroller addSubview:_welcomeAbout];

NSLayoutConstraint *pullToBottom = [NSLayoutConstraint constraintWithItem:_welcomeAbout attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:_welcomeScroller.superview attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-10.0];

NSLayoutConstraint *pullToRight = [NSLayoutConstraint constraintWithItem:_welcomeAbout attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:_welcomeScroller.superview attribute:NSLayoutAttributeRight multiplier:1.0 constant:-10];

[_welcomeScroller.superview addConstraints:@[pullToBottom, pullToRight]];

1 个答案:

答案 0 :(得分:0)

From Apple's technical note

  

通常,“自动布局”会考虑顶部,左侧,底部和右侧   视图的边缘是可见边缘。也就是说,如果您将视图固定到   它的超级视图的左边缘,你真的把它钉在了它上面   superview边界的最小x值。更改边界原点   超视图的位置不会改变视图的位置。

     

UIScrollView类通过更改原点来滚动其内容   它的界限。要使用Auto Layout,顶部,左侧,底部,   滚动视图中的右边缘现在表示其内容的边缘   图。

按钮不滚动,因为约束是相对于滚动视图的可见左边缘设置的。

Apple的解决方案建议:

  

为您的滚动视图创建一个简单的UIView内容视图   您希望内容的大小。把它作为一个子视图   滚动视图但让它继续翻译自动调整遮罩   陷入困境。

在此内容视图中,您可以像平常一样使用约束。