У меня есть дизайн, который нуждается в том, что составляет UISplitViewController где-то, кроме корня приложения. Поскольку это незаконно по какой-то глупой причине (спасибо Apple), мне пришлось перекодировать некоторые аспекты этого вручную.Как отключить мой UITableView от изменения размера в popover ненадлежащим образом при перезагрузке, когда активна клавиатура?
Таблица располагается правильно в ландшафтном режиме, но когда я перемещаю ее в popover, я получаю некоторые странные проблемы. Первоначально у меня был popover достаточно долго, чтобы он должен был сжиматься, чтобы обеспечить место для клавиатуры, в результате чего TableView был слишком большим и обрезался. Поэтому я сократил popover ... и теперь TableView сжимается, когда я перезагружаю его данные (которые я должен делать, когда пользователь вводит ключ поиска). Обратите внимание, что ошибка показывает только после I reloadData tableView; и вместо того, чтобы отсекать, теперь, когда он сокращается, это «групповой бокс» сверху и снизу.
Когда я запрашиваю данные кадра, таблица достаточно странно, кажется, поддерживает ее высоту. Что это значит, я не знаю. Если я отклоняю popover и представляю его, это не устраняет проблему (я думаю, что popover больше увеличивается?), Но когда я вспоминаю клавиатуру, она делает (popover сжимается до правильной высоты). (Я не хочу пытаться сделать это как исправление, потому что это будет просто раздражать пользователя, который активно печатает).
Edit:
Если это имеет значение, только autolayout я применил это к UITableView; ему была задана фиксированная ширина и высота. Нет данных X или Y, которые могли быть ошибкой, за исключением того, что я генерирую ошибку при попытке ссылаться на супервизор - вероятно, потому, что popover не создает супервизор, пока я не попытаюсь его представить?
Edit: Запрошенный код (К сожалению это такой большой и уродливый блок):
-(void)setupViewsAfterRotation
{
if (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation)) {
[self.searchTable.view removeFromSuperview];
self.popover=[[UIPopoverController alloc] initWithContentViewController:self.searchTable];
self.navigationItem.leftItemsSupplementBackButton=YES;
self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@"Search"
style:UIBarButtonItemStylePlain
target:self
action:@selector(presentPopover)];
[self setupPortraitConstraints];
//NSLog(@"Intrinsic size data: width: %f and height: %f",self.searchTable.view.intrinsicContentSize.width, self.searchTable.view.intrinsicContentSize.height);
//NSLog(@"Runtime size data: width: %f and height: %f",self.searchTable.view.frame.size.width, self.searchTable.view.frame.size.height);
} else {
[self.popover dismissPopoverAnimated:NO];
self.popover=nil;
self.navigationItem.leftBarButtonItem=nil;
[self.view addSubview:self.searchTable.view];
[self setupLandscapeConstraints];
}
}
-(void)setupLandscapeConstraints
{
if (self.tableViewConstraints) {
[self.view removeConstraints:self.tableViewConstraints];
self.tableViewConstraints=nil;
}
NSMutableArray *landscapeConstraints=[[NSLayoutConstraint constraintsWithVisualFormat:@"|[tableView(==256)]"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view}] mutableCopy];
[landscapeConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[topLayoutGuide][tableView]|"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view,
@"topLayoutGuide":[self topLayoutGuide]
}]];
self.tableViewConstraints=landscapeConstraints;
[self.view addConstraints:self.tableViewConstraints];
}
-(void)setupPortraitConstraints
{
if (self.tableViewConstraints) {
[self.view removeConstraints:self.tableViewConstraints];
self.tableViewConstraints=nil;
}
NSMutableArray *portraitConstraints;
if (self.keyboardHeight) {
NSLog(@"Height set to 612");
portraitConstraints=[[NSLayoutConstraint constraintsWithVisualFormat:@"V:[tableView(==612)]"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view}] mutableCopy];
[self.popover setPopoverContentSize:CGSizeMake(256, 612) animated:YES];
}
else{
NSLog(@"Height set to 768");
portraitConstraints=[[NSLayoutConstraint constraintsWithVisualFormat:@"V:[tableView(==768)]"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view}] mutableCopy];
[self.popover setPopoverContentSize:CGSizeMake(256, 768) animated:YES];
}
[portraitConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"[tableView(==256)]"
options:0
metrics:nil
views:@{@"tableView": self.searchTable.view}]];
self.tableViewConstraints=portraitConstraints;
[self.searchTable.view addConstraints:self.tableViewConstraints];
}
Извините, вопрос еще не совсем ясен. Это из-за отсутствия кофе, изображений или кода, можете ли вы помочь с последними? Никаких скриншотов не требуется, некоторые базовые рисунки помогут. –
Правильно ли вы задали размер контента для popover? – Krishnan
@ Кришнан на самом деле, нет; Я думал, что с помощью Autolayout popover может использовать внутренний размер содержимого, предоставляемый TableView, когда я устанавливаю его ограничения автоопределения. (Который в какой-то мере работал некоторое время ...) Быстрый эксперимент подсказывает, что вы можете что-то сделать, позвольте мне сделать еще одну работу. – RonLugge