我正在尝试在代码中生成视图。这是我的视图对象的层次结构
- UIScrollView
- 界面视图
- 用户界面按钮
- 界面视图
ScrollView 应该与窗口大小相同。按钮应尽可能大。我正在使用 iOS 自动布局,所以我所有对象的约束字符串看起来像这样
H:|[object]|
V:|[object]|
我还为每个对象设置translatesAutoresizingMaskIntoConstraints
了。NO
问题是按钮只获得默认的按钮大小。它的父视图对象 (UIView) 仅获得其子视图所需的大小。
红色:UIScrollView / 黄色:UIView
如何强制这些视图与滚动视图一样大?
当我使用 UIView 而不是 UIScrollView 时,一切都很好......
这是一些代码:
- (void) viewDidLoad {
[super viewDidLoad];
// SCROLL VIEW
UIScrollView* scrollView = [UIScrollView new];
scrollView.backgroundColor=[UIColor redColor];
scrollView.translatesAutoresizingMaskIntoConstraints = NO;
//CONTAINER VIEW
UIView *containerView = [UIView new];
containerView.translatesAutoresizingMaskIntoConstraints = NO;
containerView.backgroundColor = [UIColor yellowColor];
[scrollView addSubview:containerView];
// CONSTRAINTS SCROLL VIEW - CONTAINER VIEW
[scrollView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[containerView]|"
options:0 metrics:nil
views:@{@"containerView":containerView}]];
[scrollView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[containerView]|"
options:0 metrics:nil
views:@{@"containerView":containerView}]];
// BUTTON
UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.translatesAutoresizingMaskIntoConstraints = NO;
[button setTitle:@"I'm way to small" forState:UIControlStateNormal];
[containerView addSubview:button];
// CONSTRAINTS CONTAINER VIEW - BUTTON
[containerView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button]|"
options:0 metrics:nil
views:@{@"button":button}]];
[containerView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[button]|"
options:0 metrics:nil
views:@{@"button":button}]];
self.view = scrollView;
}
更新: 我真的不知道,为什么会这样。如果您在 IB 中设置视图,连接插座并在代码中实例化视图,则滚动视图的行为类似于普通视图(垂直反弹)。它的 contentSize 计算不正确。更多在这里。但是如何正确地做到这一点?