Pergunta

Eu tenho um UITableView que não está sendo redimensionadas corretamente usando autoresizeMask (no iPhone 3.0).

O UITableView está dentro de um UIViewController dentro de um UINavigationController dentro de um UITabBarController, todos os quais estão sendo criados programaticamente. A barra de status é visível.

O código do UIViewController é basicamente:

- (void)loadView {
    UIView* rootView = [[UIView alloc] init];
    self.view = rootView;
    [rootView release]; 
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-20-49-44)];
    table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:table];
}

Quando criado assim, o UITableView é ligeiramente maior que o espaço disponível. Se não me engano, é exatamente 44 pixels maior, o tamanho da barra de navegação.

No entanto, se eu remover o comentário da linha comentada e comentar a linha seguinte o tamanho do UITableView é exatamente correto. Eu preferiria usar autoresizingMask em vez de calcular manualmente o tamanho do UITableView. O que estou fazendo de errado?

Agradecemos antecipadamente!

Foi útil?

Solução

O problema parece ser que eu não estava definindo o quadro da exibição de raiz em loadView. Se você definir esse quadro, e, em seguida, definir o quadro das subviews em relação a esse quadro, em seguida, as máscaras AutoResize irá redimensionar corretamente os subviews de acordo com a forma como a exibição de raiz foi redimensionada pelo quadro.

Por exemplo:

- (void)loadView {
    UIView* rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    self.view = rootView;
    [rootView release]; 
}

- (void)viewDidLoad {
    [super viewDidLoad];

    table = [[UITableView alloc] initWithFrame:self.view.frame]; 
    table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:table];
}

Graças à Colin Gislason que me apontou na direção certa.

Outras dicas

A máscara de redimensionamento automático não irá ajudá-lo com o tamanho inicial da exibição de tabela. A exibição de tabela é criada com o quadro que você dá a ele. A máscara de redimensionamento automático define as regras para o redimensionamento este quadro relativa à vista principal quando do pai quadro alterações.

Então, se eu definir uma tabela que é 320x100 ele vai ficar desse tamanho a menos que eu mudá-lo de forma explícita ou moldura muda da vista principal.

Dependendo dos outros pontos de vista, você poderia fazer o cálculo com base nos outros pontos de vista mantidos pelo pai ou pela própria armação do pai.

Criar UIViewController subclasse instand de UITableViewController subclasse.

Inserir instância UITableView.

no NIB simplesmente arrastar e soltar UIView

em cima daquele lugar wier o objeto UITableView existente.

definir o tamanho da via uitableview bico ou método viewDidLoad.

definir a referência, fonte de dados e através do delegado nib.

Agora é simplesmente transferir a classe UIViewController e pode mudar o tamanho tableview como desejar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top