2012-10-08 13 views
16

Sto provando ad aggiungere un UIView all'intestazione di UITableView, quindi, usando NSLayoutConstraints, voglio dargli un'altezza.Usa NSLayoutConstraints sulla vista dell'intestazione di UITableView

Ho esaminato i documenti Apple e i video del WWDC 2012 ma non riesco a trovare questo particolare errore da nessuna parte!

Ho il seguente codice:

- (UIImageView *)logoImageView 
{ 
    if (!_logoImageView) { 
     _logoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo"]]; 
     [_logoImageView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    } 
    return _logoImageView; 
} 

... in viewDidLoad

UIView *tableHeaderView = [[UIView alloc] init]; 
tableHeaderView.translatesAutoresizingMaskIntoConstraints = NO; 

[tableHeaderView addSubview:self.logoImageView]; 

[self.tableView setTableHeaderView:tableHeaderView]; 

NSDictionary *constraintViews = @{@"tableView" : self.tableView, @"tableHeaderView" : tableHeaderView, @"logoImageView" : self.logoImageView}; 

[self.tableView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[tableHeaderView(50)]" 
                     options:0 
                     metrics:nil 
                     views:constraintViews]]; 

Tuttavia quando l'eseguo ottengo il seguente errore:

2012-10-08 16:31:34.559 myApp[6934:c07] *** Assertion failure in -[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2372/UIView.m:5776 
2012-10-08 16:31:34.561 myApp[6934:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.' 
*** First throw call stack: 
(0x199b012 0x17c0e7e 0x199ae78 0x1256f35 0x7589ef 0x17d46b0 0x622fc0 0x61733c 0x622eaf 0x7f78cd 0x7401a6 0x73ecbf 0x73ebd9 0x73de34 0x73dc6e 0x73ea29 0x741922 0x7ebfec 0x738bc4 0x738dbf 0x738f55 0x741f67 0x705fcc 0x706fab 0x718315 0x71924b 0x70acf8 0x27e8df9 0x27e8ad0 0x1910bf5 0x1910962 0x1941bb6 0x1940f44 0x1940e1b 0x7067da 0x70865c 0x6d5d 0x2395) 
libc++abi.dylib: terminate called throwing an exception 
+3

Posso chiederti se hai mai trovato una soluzione a questo problema? –

risposta

2

Il modo migliore per risolvere questo problema è utilizzare Interface Builder per impostare l'intestazione UITableView, quindi aggiungere un Outlet all'altezza NSLayoutConstraint.

+3

Puoi elaborare. Non ho idea di cosa significhi. – jgvb

+0

'NSLayoutConstraint's sono oggetti regolari, quindi puoi creare delle prese per loro da Interface Builder e manipola le loro proprietà in fase di esecuzione proprio come faresti per una vista IB (ad esempio) –

+0

Non vedo un modo per aggiungere il vincolo di altezza o larghezza all'intestazione o al piè di pagina di 'UITableView' nello storyboard. Aggiungi nuovi vincoli ha tutto bloccato all'interno. – derpoliuk

3

I ha avuto la stessa eccezione quando stavo cercando di impostare la vista dell'intestazione della tabella. Quando ho notato che la vista aveva Contraints ho semplicemente deselezionato l'opzione "Usa l'Autolayout" da Storyboard.

Screenshot: http://i.stack.imgur.com/5jWHy.png

Ciò ha risolto per me.

+8

Si sta solo lavorando attorno al problema, non risolvendolo :(Non si può semplicemente disattivare il caricamento automatico! – jgvb

1

Prova questo:

logoImageView.translatesAutoresizingMaskIntoConstraints = YES; 

(Se non funziona, provare a rimuovere:

tableHeaderView.translatesAutoresizingMaskIntoConstraints = NO; //Remove this line 

:)

0

non ho avuto alcuna soluzione adeguata a questo problema, ma è possibile correggilo usando i frame e non impostando la proprietà translatesAutoresizingMaskIntoConstraints su No (di default è yes, quindi non impostarlo)

CGRect headerViewFrame = CGRectMake(0,0,320,60); //Frame for your header/footer view 

UIView *tableHeaderView = [[UIView alloc] initWithFrame:headerViewFrame]; 
tableHeaderView.translatesAutoresizingMaskIntoConstraints = Yes; //Or don't set it at all 
[self.tableView setTableHeaderView:tableHeaderView]; 
Problemi correlati