UIScrollView com restrições de layout automático do iOS: tamanho incorreto para subvisualizações
Estou tentando gerar uma visão no código. Aqui está a hierarquia do meu objeto de visão
UIScrollViewUIViewUIButtonO ScrollView deve ter o mesmo tamanho da janela. O botão deve ser o maior possível. Estou usando o layout automático do iOS, então as cadeias de restrição para todos os meus objetos se parecem com isso
H:|[object]|
V:|[object]|
Eu também definitranslatesAutoresizingMaskIntoConstraints
paraNO
para cada objeto.
O problema é que o botão só recebe o tamanho padrão do botão. Seu objeto de visualização pai (UIView) obtém apenas o tamanho que suas subvisualizações precisam.
vermelho: UIScrollView / amarelo: UIView
Como posso forçar essas visualizações a serem tão grandes quanto o scrollView?
Quando eu uso um UIView em vez do UIScrollView, tudo funciona muito bem ...
Aqui está um código:
- (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;
}
ATUALIZAR: Eu realmente não sei porque isso está acontecendo. Se você configurar a visualização no IB, conectar as saídas e instanciar a visualização no código, a rolagem se comportará como uma exibição normal (que salta verticalmente). Seu contentSize não é calculado corretamente. MaisAqui. Mas como fazer isso corretamente?