UIScrollView z ograniczeniami automatycznego układu iOS: Niewłaściwy rozmiar dla podglądów
Próbuję wygenerować widok w kodzie. Oto hierarchia mojego obiektu widoku
UIScrollViewUIViewUIButtonScrollView powinien mieć taki sam rozmiar jak okno. Przycisk powinien być jak największy. Używam automatycznego układu iOS, więc ciągi ograniczeń dla wszystkich moich obiektów wyglądają tak
H:|[object]|
V:|[object]|
Ustawiłem teżtranslatesAutoresizingMaskIntoConstraints
doNO
dla każdego obiektu.
Problem polega na tym, że przycisk otrzymuje tylko domyślny rozmiar przycisku. Jego obiekt widoku nadrzędnego (UIView) pobiera tylko rozmiar, którego potrzebują jego widoki.
czerwony: UIScrollView / żółty: UIView
Jak mogę zmusić te widoki, aby były tak duże jak scrollView?
Kiedy używam UIView zamiast th UIScrollView wszystko działa świetnie ...
Oto kod:
- (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;
}
AKTUALIZACJA: Naprawdę nie wiem, dlaczego tak się dzieje. Jeśli ustawisz widok w IB, podłącz gniazda i skonfiguruj widok w kodzie, widok przewijania zachowuje się jak normalny widok (który odbija się pionowo). Jego contentSize nie jest poprawnie obliczane. Więcejtutaj. Ale jak to zrobić poprawnie?