Função facilitadora para tela de todos os tamanhos
No momento estou trabalhando em um projeto onde o autoLayout
não está sendo usado por razões de compatibilidade de versões iOS mais antigas, e isto não facilita a criação de layout. Mas claro, nem tudo é um pesadelo quando o StackOverflow te abraça. Ao procurar por uma opção factível de scrollView me deparei com este post que adiantou meu trabaho em grande parte. A sacada desta resposta é a seguinte: Fazer um loop em todos os subviews
do seu scrollView
e montar um CGRect
(CGRect vem de CGRectangle) com a altura apropriada do scroll para o seu contentSize
caber todos os itens da tela sem advinhações. Com isto, pegamos o tamanho da NavigationBar
e TabBar
(Não é necessário, mas caso a sua UIView esteja calculada para encher a tela, o scroll vai calcular a área inteira e ignorar a nav/tab
) para saber se é necessário dar o scroll.
Agora, suponha que você tenha na sua interface
referente à esta implementation
, uma variável chamado scrollView
referenciando o scroll da sua página. De início, ela não terá seu contentSize
montado, então o valor é tomado a partir dos subviews
. Logo em seguida, caso o tamanho do scroll menos a área da nav/tab
da tela seja maior que o conteúdo exibido, é necessário que o scroll aconteca. Caso contrário, a tela poderá se manter estática para um user experience um pouco mais adequado.
_scrollView e self.scrollView referenciam o mesmo objeto de instância
- (void)setScrollView {
// Pegando os tamanhos da navbar e tabbar caso precise usar na UIView principal
CGFloat tabSize = self.tabBarController.tabBar.frame.size.height;
CGFloat navSize = [self navigationController].navigationBar.frame.size.height;
CGFloat NAV_TAB_SIZE = tabSize + navSize;
// Loop nos subviews
CGRect contentRect = CGRectZero;
for (UIView *view in self.scrollView.subviews) {
contentRect = CGRectUnion(contentRect, view.frame);
}
// Montando o tamanho do scroll
self.scrollView.contentSize = CGSizeMake(contentRect.size.width, contentRect.size.height);
// Verificando se o scrollview deve animar com bounce e dar scroll
if (self.scrollView.contentSize.height - NAV_TAB_SIZE > contentRect.size.height) {
self.scrollView.scrollEnabled = NO;
self.scrollView.bounces = NO;
} else {
_scrollView.bounces = YES;
_scrollView.scrollEnabled = YES;
}
É só isso que temos sobre o scrollView hoje. Uma pequena ajuda não faz mal. Um abraço!