У меня есть статический UITableView с 3 строками в 1 разделе. Каждая строка содержит UITextView, размер которой должен изменяться в зависимости от содержимого. У каждого объекта UITextView отключена прокрутка, чтобы заставить ее расти. Каждый прикреплен на всех 4 сторонах к содержимому contentView и не имеет других ограничений.UITextView не изменяет размер правильно только на iPad
Когда я запускаю iPad (реальный или сим), ячейка изменяется до одной строки текста независимо от содержимого UITextView. Когда я исследую иерархию представления в отладчике, я вижу, что высота UITextView устанавливается равной 27,5, хотя высота представления контента составляет 183,5. Это, по-видимому, является результатом ограничения высоты на UITableViewCellContentView, который ограничивает высоту ячейки. Это не ограничение, которое я установил. Мой контроллер табличного представления не имеет метода heightForRow или cellForRow, поскольку он является статическим табличным представлением и использует автоматическую компоновку для всего. Я не знаю, как это ограничение добавляется.
Вот точно такая же иерархия с точно таким же содержанием в ту же самой точке, когда работать на IPod Touch. Обратите внимание, что высота UITextView и высота контента на этот раз одинаковы. В этом случае ограничение UITableViewCellContentView на высоте достаточно велико, чтобы соответствовать высоте UITextView.
В обоих случаях, это тот же самый источник выполнения и отображения того же содержания. Это содержимое содержит короткие текстовые строки с возвратом каретки, поэтому для обоих размеров экрана он должен иметь размер одного и того же размера. 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 - Конструкция основана исключительно на любой/любого класса размера.
Какого размера класс вид вы делаете большую часть ограничений в?Лучше всего использовать Any/Any, если у вас нет реальных различий между iPad и iPhone. Вам также нужно смотреть с popovers, поскольку класс размера в popover - это компактная ширина. Следовательно, кодирование в классе Any/Any size является самым безопасным. Его класс размера звуков, связанный, как кажется, ограничения несовместимы. –
@RoryMcKinnel Для этого экрана я использую только класс Any/Any size - см. Распечатку на экране, которую я только что добавил в конце сообщения. Одна странная вещь: я портировал именно эту раскадровку в новый проект с одним представлением, чтобы увидеть, могу ли я изолировать проблему от всего, что происходит в моем проекте, и экран правильно вписывается в новый проект как на iPad, так и на iPhone, хотя раскадровка идентична, и контроллер табличного представления идентичен. Может ли быть масштаб проекта, влияющий на макет? –