添加到 UIScrollView 时 UIButton 不滚动
Posted
技术标签:
【中文标题】添加到 UIScrollView 时 UIButton 不滚动【英文标题】:UIButton does not scroll when adding to UIScrollView 【发布时间】:2015-05-05 15:50:54 【问题描述】:我已将UIButton
和UILabel
添加到UIScrollView
。我使用自动布局向按钮添加了两个约束,而对标签则没有。我可以看到标签在屏幕上移动,但是我没有看到按钮在移动。我认为这与我添加到按钮的自动布局约束有关。我希望看到按钮滚动的方式与我看到标签在窗口/屏幕上滚动的方式相同。
以下是我如何设置所有内容:
_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】:From Apple's technical note:
一般来说,自动布局会考虑顶部、左侧、底部和右侧 视图的边缘成为可见边缘。也就是说,如果您将视图固定到 它的超级视图的左边缘,你真的把它固定在 超级视图边界的最小 x 值。更改边界原点 父视图的位置不会改变视图的位置。
UIScrollView
类通过更改原点来滚动其内容 它的界限。为了使这项工作与自动布局一起使用,顶部、左侧、底部、 滚动视图中的右边缘现在意味着其内容的边缘 查看。
按钮不滚动,因为约束是相对于滚动视图的可见左边缘设置的。
苹果的解决方案建议:
为您的滚动视图创建一个普通的
UIView
内容视图 您希望内容具有的大小。使其成为 滚动视图,但让它继续翻译自动调整大小的掩码 进入约束。
在此内容视图中,您可以像往常一样使用约束。
【讨论】:
以上是关于添加到 UIScrollView 时 UIButton 不滚动的主要内容,如果未能解决你的问题,请参考以下文章