Non sono sicuro se "gestore di layout" è il termine corretto, ma sto cercando un modo per far entrare le UIViews nella loro visualizzazione genitore, come se fossero le div di sinistra in una pagina HTML. C'è un modo semplice per farlo, tramite l'iPhone o l'esterno?iPhone - Gestione layout per UIViews?
risposta
Non conosco l'API per farlo. Core Animation su Mac ha alcune funzionalità di layout, ma penso che non sia stato incluso su iPhone.
Ciò che descrivi non sembra estremamente difficile. Open source vero? :-)
Sì! Sono generalmente troppo sciatto/pigro/egoista per qualsiasi mia intenzione open source di andare ovunque. Ma forse sarà diverso :) – morgancodes
Non c'è nulla di simile a questo veramente costruito nell'sdk, ma non dovrebbe essere troppo difficile per ottenere il comportamento che stai cercando. Basta chiamare il
NSArray *subs = [parentView subviews];
per ottenere tutte le sottoview già presenti. Loop attraverso di loro come questo
CGRect leftMostViewsFrame = nil;
for(UIView *cur in subs){
CGRect where = cur.frame;
//find the left most frame for a given X coord
}
e posizionare la nuova visualizzazione accanto ad essa
newView.frame = CGRectMake(leftMostViewsFrame.origin.x + leftMostViewsFrame.size.width,
[parentView addSubview:newView];
......
si può scrivere molto più pulito di quello e non v'è un molto più controllo e ragionamento che devi fare per ottenere tutto il comportamento del float, ma questo è l'approccio di base che prenderei. Non so se c'è una lib di terze parti che potresti usare o meno.
Grazie Joe, andrò avanti e lo farò. – morgancodes
@morgancodes Ho scritto una soluzione completa basata su questa risposta: http://stackoverflow.com/a/11379438/974531 –
Dopo aver effettuato alcune ricerche ho trovato questo: http://code.google.com/p/layoutmanagers/ Last Development era nel dicembre 2009 ma a prima vista, sembra che possa essere ancora applicabile alle versioni correnti di iOS.
Ho creato un fork di quanto sopra su github: https://github.com/RefuX/LayoutManagers-Fork e ha aggiunto GridLayout. L'ho usato su interfacce utente iPhone e iPad. Per iOS 4 e 5. Mi piace :) – RefuX
Ecco una soluzione completa (basata su the answer by Joe Cannatti):
Aggiungi un
UIView
allo storyboard, e collegarlo al vostroViewController
sotto qualche nome, per esempiocontainer
. (Nel caso il vostro contenitore è vista tutta la visione, è possibile utilizzareself.view
invece dicontainer
all'internoViewController.m
.)Creare e aggiungere elementi dell'interfaccia utente a
container
. Ad esempio, è possibile creare e aggiungere unUILabel
-container
con:UILabel* label = [[UILabel alloc] init]; label.text = @"Foo"; [label sizeToFit]; [container addSubview:label];
Inizialmente, e ogni volta che si aggiungere/rimuovere/modificare elementi dell'interfaccia utente da/per/nel raggio di
container
, è possibile li ri-organizzare in flusso Layout con:float x = 0, y = 0, width = container.frame.size.width, rowHeight = 0; for (UIView* view in container.subviews) { // only re-arrange user-added views (change condition as required) if (![view isKindOfClass:UILabel.class]) continue; float w = view.frame.size.width, h = view.frame.size.height; bool fitsInRow = x + w <= width; if (!fitsInRow) {x = 0; y += rowHeight; rowHeight = h;} view.frame = CGRectMake(x, y, w, h); x += w; rowHeight = MAX(rowHeight, h); } // if container is a UIScrollView, change content size container.contentSize = CGSizeMake(width, y + rowHeight);
- 1. Flatten Uiviews Subviews a UIImage iPhone 3.0
- 2. Ridimensionamento UIViews
- 3. Layout tastiera iPhone per numeri negativi?
- 4. UIViews con UIPageControl
- 5. Centro verticale di gestione layout Java
- 6. Trascina UIView tra le UIViews
- 7. Come impostare la spaziatura standard tra UIViews in codice con layout automatico?
- 8. Gestione dei cookie HTTP su iPhone
- 9. IOS nuova Facebook App iPhone UISplitViewController layout
- 10. iPhone gestione della memoria e rilascio
- 11. iOS: Devo aggiungere UIViews o CALAYER per l'animazione?
- 12. gestione layout android-land e rotazione dello schermo
- 13. Gestione sessioni su Google App Engine con Android/IPhone
- 14. Primo soccorritore per iPhone
- 15. Gestione degli errori Mac OSX/iPhone nel Delegato app?
- 16. Zurb Foundation: layout non reattivo su un iPhone
- 17. Gestione della memoria Qt per oggetti Qt
- 18. Layout personalizzato per RadioButton
- 19. Layout predefinito per ArrayAdapter
- 20. Cercando di animare due UIViews contemporaneamente, solo una mossa
- 21. Imposta il tocco esclusivo su più UIViews della stessa classe
- 22. Centro due UIViews di diverse dimensioni in orizzontale
- 23. Capovolgi l'animazione tra due UIViews su un UIViewController
- 24. Gestione della migrazione dei dati dalla versione "lite" alla versione "pro" dell'app per iPhone
- 25. Layout layout PlantUML
- 26. Layout del repository Mercurial per più rami
- 27. Memoria utilizzata da qualsiasi app per iPhone
- 28. Dimensioni carattere diverse per UILabel usando il layout adattivo
- 29. Il modo più semplice/veloce per applicare una modalità di fusione tra due UIViews
- 30. Gestione delle eccezioni per ThreadPoolExecutor
stavo pensando la stessa cosa. Una raccolta di LayoutManager come in Java Swing sarebbe utile se davvero non volessi preoccuparti di InterfaceBuilder, ma anche di non dover gestire le complessità del posizionamento di tutto a mano. – ra9r
C'è solo la vista del webkit se vuoi mostrare solo cose. Ho fatto confusione con l'incorporamento di html per roba dello schermo informativo ben strutturata. – morgancodes
Questo non esiste realmente in iOS 5 o versioni precedenti.Per informazioni su iOS 6, consulta la documentazione protetta dalla NDA che non possiamo discutere apertamente qui. –