Esta noite eu tive que alterar o tamanho de uma visualização no iOS 7. Como a visualização estava abaixo da barra de navegação (o que não foi um problema até 7), eu precisava ver onde a barra de navegação do iOS 6 ficaria, mas também escondê-la view (eu percebo que, dado o tamanho estático das barras de navegação no iOS, isso poderia ser feito de forma mais simples, mas o exemplo é dado mais para demonstração do que qualquer outra coisa).
CGRect debugFrame = self.navigationBar.frame;
UIView *debugView = [[UIView alloc] initWithFrame:debugFrame];
[debugView debugMySize];
[self.view addSubview:debugView];
self.navigationBar.hidden = YES;
debugMySize
é um método de categoria que incluí que exibe uma borda colorida aleatória de 1pt ao redor de qualquer UIView. Este é o código que você pode adicionar à categoria UIView + ViewHighlighter para fazer isso:
-(void) debugMySize{
int red = rand() % 255;
int green = rand() % 255;
int blue = rand() % 255;
UIColor* myColor = [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:1.0];
self.layer.borderColor = [myColor CGColor];
self.layer.borderWidth = 1;
}
EDITAR
Recentemente, tive que encontrar uma subvisualização que estava causando problemas, mas não queria ter o trabalho de adicionar debugMySize em cada subvisualização para descobrir qual era o culpado. Então, adicionei este código à categoria:
-(void)debugSubviews{
void (^block)(id) = ^(UIView *subview) {
[subview debugMySize];
[subview debugSubviews];
};
[(self.subviews) enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
block(obj);
}];
}
-(void)debugMyAndAllSubviewSizes {
[self debugMySize];
[self debugSubviews];
}
O primeiro método percorre todas as subvisualizações do UIView atual, chama debugMySize
e depois ocorre novamente. O segundo método apenas chama o primeiro e debugMySize
no próprio UIView. Desta forma, você obtém uma bela caixa ao redor de cada subvisualização, das subvisualizações da subvisualização e assim por diante até que não haja mais nada.