2015-06-08 3 views
6

У меня есть статический UITableView с 3 строками в 1 разделе. Каждая строка содержит UITextView, размер которой должен изменяться в зависимости от содержимого. У каждого объекта UITextView отключена прокрутка, чтобы заставить ее расти. Каждый прикреплен на всех 4 сторонах к содержимому contentView и не имеет других ограничений.UITextView не изменяет размер правильно только на iPad

Когда я запускаю iPad (реальный или сим), ячейка изменяется до одной строки текста независимо от содержимого UITextView. Когда я исследую иерархию представления в отладчике, я вижу, что высота UITextView устанавливается равной 27,5, хотя высота представления контента составляет 183,5. Это, по-видимому, является результатом ограничения высоты на UITableViewCellContentView, который ограничивает высоту ячейки. Это не ограничение, которое я установил. Мой контроллер табличного представления не имеет метода heightForRow или cellForRow, поскольку он является статическим табличным представлением и использует автоматическую компоновку для всего. Я не знаю, как это ограничение добавляется.

enter image description here

Вот точно такая же иерархия с точно таким же содержанием в ту же самой точке, когда работать на IPod Touch. Обратите внимание, что высота UITextView и высота контента на этот раз одинаковы. В этом случае ограничение UITableViewCellContentView на высоте достаточно велико, чтобы соответствовать высоте UITextView.

enter image description here

В обоих случаях, это тот же самый источник выполнения и отображения того же содержания. Это содержимое содержит короткие текстовые строки с возвратом каретки, поэтому для обоих размеров экрана он должен иметь размер одного и того же размера. UITextView хочет увеличить его высоту до 183,5, но на iPad высота ячейки излишне ограничена ограничением, которое генерируется iOS.

Вот код для viewDidLoad:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    //shrink the uiswitch a little bit 
    self.displayRegexCharsSwitch.transform = CGAffineTransformMakeScale(0.70, 0.70); 

    //these next 2 lines set up the table to automatically resize based on content 
    self.tableView.estimatedRowHeight = 100.0f; 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 

    //next line hides the blank cells 
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

    //these are needed on iPad or rows with accessory view don't resize 
    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} 

Опять же, нет heightForRow или cellForRow в контроллере представления таблицы в связи с использованием статического представления в виде таблицы.

Я сбит с толку. Почему UITextField сообщает о другом размере контента на iPad, чем на iPod, если контент тот же, и код тот же? Из представления иерархии видно, что UITextField внутренне знает, что его высота равна 200, но contentSize возвращает 27.5. Это статический вид таблицы, поэтому нет метода heightForRow и метода cellForRow. Я в зависимости от авто макета, чтобы управлять всем макетом - что он делает правильно на iPad.

EDIT

FYI - Конструкция основана исключительно на любой/любого класса размера.

enter image description here

+0

Какого размера класс вид вы делаете большую часть ограничений в?Лучше всего использовать Any/Any, если у вас нет реальных различий между iPad и iPhone. Вам также нужно смотреть с popovers, поскольку класс размера в popover - это компактная ширина. Следовательно, кодирование в классе Any/Any size является самым безопасным. Его класс размера звуков, связанный, как кажется, ограничения несовместимы. –

+0

@RoryMcKinnel Для этого экрана я использую только класс Any/Any size - см. Распечатку на экране, которую я только что добавил в конце сообщения. Одна странная вещь: я портировал именно эту раскадровку в новый проект с одним представлением, чтобы увидеть, могу ли я изолировать проблему от всего, что происходит в моем проекте, и экран правильно вписывается в новый проект как на iPad, так и на iPhone, хотя раскадровка идентична, и контроллер табличного представления идентичен. Может ли быть масштаб проекта, влияющий на макет? –

ответ

4

Нашел! Я поместил макет в новый проект, чтобы изолировать проблему от других вещей, происходящих в проекте. Проблема компоновки не возникла в новом проекте. Поэтому я сравнил общие параметры проекта, и я заметил, что новый проект имел цель развертывания iOS 8.3, а исходный проект имел цель развертывания iOS 6.0. Когда я установил цель развертывания нового проекта в iOS 6.0, возникла проблема с макетом. То же самое для iOS 7.0. Однако для iOS 8.0 и выше проблема исчезает. Время, чтобы заставить свои пользователь перейти на прошивку 8.

enter image description here

Смежные вопросы