Създавам изглед на iOS, който показва различни статични текстови елементи. Xib изглежда така:
Той използва четири етикета за заглавие, клеймо за време, основен текст и долен колонтитул. Всеки изглед е закотвен към родствения изглед над него вертикално и е закотвен отляво/вдясно на родителския изглед. Всички етикети имат фиксирана височина, с изключение на тялото, което има >= височина и броя на редовете, зададен на 0 с "пренасяне на думи" като стил на пренасяне на редове. Родителският изглед е UIScrollView.
На iPhone изглежда добре:
На iPad обаче изглежда така:
а? Откъде идва цялото това допълнително вертикално пространство в етикета на тялото? Xib и неговият контролер за изглед са идентични между iPhone и iPad (в момента няма персонализиран код за iPad). Открих, че вертикалното пространство е пряко свързано с това колко обвивания на редове изобразява етикетът. Ако няма обвиващи линии, няма допълнително вертикално пространство. Ако само няколко реда се обвиват, има малко допълнително вертикално пространство. Ако почти всеки ред се увива, добре, така изглежда.
Първо, някакви идеи защо UILabel се държи по този начин?
Второ, ако не мога да го накарам да спре да прави това, как мога да го заобиколя?
Вече пробвах няколко неща. Ако извикам [bodyLabel sizeToFit] в рамките на -viewDidLayoutSubViews, тогава той коригира етикета, но не коригира оформлението на нито един от родствените изгледи (напр. етикетът на долния колонтитул е заседнал в долната част на екрана, вместо да бъде изтеглен точно под тяло). Всички опити да накарате целия изглед да преоформи дъщерните си елементи след извикване на sizeToFit се игнорират. Също така се опитах да оразмеря UILabel чрез изчисляване на височина въз основа на шрифта, което води до същото поведение като -sizeToFit (макар и с повече код).
Замяната на Body UILabel с UITextView вместо това не ми създава странните проблеми с вертикалното разстояние, но трябва да изчисля височината на UITextView ръчно (използвайки изчисления на шрифтове) и нещо относно преоразмеряването на UITextView в рамките на родителския UIScrollView го прави така, че UIScrollView просто отказва да превърта (сякаш не знае, че съдържанието му е твърде голямо за неговите граници).
Така че в момента съм заседнал. Дори само обяснение защо UILabel се държи по този начин в оформлението на iPad би било полезно.
[bodyLabel sizeToFit]
провокира, че долният колонтитул заседна в долната част, тогава трябва да провериш ограниченията си, вероятно има едно, което да постави долния колонтитул в долната част и други, които карат етикета на тялото ти да се разтяга вертикално . - person CoderPug   schedule 04.09.2013