Mam niestandardowy UIView, który ma dedykowaną, ręcznie ustawioną ramkę dla orientacji pionowej i poziomej, ponieważ automatyczne maskowanie po prostu nie działa w moim przypadku.Jak wymusić layoutSubviews z UIView.
ustawić tę ramkę w:
- (void)viewWillAppear:(BOOL)animated
I to działa zgodnie z oczekiwaniami.
Mój problem polega na tym, że moje UIView posiada ponadto subviews, które mają również dedykowaną pozycję dla portretu/krajobrazu.
I umieścić te subviews w:
- (void)layoutSubviews
Gdybym teraz zostawić viewController w np orientację pionową, obróć do pejzażu na innym viewController, a następnie wróć do tego viewController Widzę, że mój widok został poprawnie zmieniony, ale subviews mojego widoku, które znajdują się w layoutSubviews, nie są jeszcze zmieniane, ale zmieniają się w animowany sposób po widok już się pojawił.
zrobić nic w viewDidAppear a ja już próbowałem dzwoniąc
- (void)layoutIfNeeded
Jak również:
- (void)setNeedsLayout
W viewWillAppear, ale nie wydaje się, aby cokolwiek zmienić.
Jakieś pomysły, co robię źle?
Dzięki.
ta metoda wydaje się działać lepiej niż po prostu wywoływanie self.view.layoutSubviews() –
Wywołanie layoutSubviews będzie używać wszelkich ograniczeń, które ustawiłeś, aby uporządkować subviews. Jeśli to, co robisz, nie używa ograniczeń, musisz ustawić NeedsLayout, a następnie layoutIfNeeded, aby wymusić natychmiast aktualizację układu. – Toby