iPhone SDK: Установка размера табличного представления UISearchDisplayController

Табличное представление моего приложения не занимает полноэкранную высоту, поскольку я позволил 50 пкс внизу для баннера.

Когда я начинаю вводить в панели поиска, табличное представление результатов поиска больше; это заполняет все доступное экранное пространство между панелью поиска и панелью вкладок. Это означает, что самый последний результат поиска затенен баннером.

Как я указываю размер табличного представления, используемого UISearchDisplayController? Нет никакого свойства границ или кадра, которое я вижу.

РЕДАКТИРОВАНИЕ ДЛЯ ДОБАВЛЕНИЯ СНИМКОВ ЭКРАНА:

Это - то, как табличное представление настраивается в IB. Это заканчивает 50 пкс за исключением синтезируемой панели вкладок.

alt text
(источник: lightwood.net)

Это - то, как содержание обычно отображается. Я прокрутил к самой нижней части сюда. alt text
(источник: lightwood.net)

Это - то, как это отображается при поиске. Снова, я прокрутил к самой нижней части. Если я отключаю рекламный баннер, я вижу, что поисковая таблица дисплея распространяет право вниз на панель вкладок.

alt text
(источник: lightwood.net)

12
задан Glorfindel 26 June 2019 в 07:07
поделиться

2 ответа

Ключом к решению этой проблемы было выяснение того, когда нужно изменить геометрию табличного представления. Вызов:

[self.searchDisplayController.searchResultsTableView setFrame:someframe];

после создания UISearchDisplayController был бесполезен. Ответом стал метод делегата:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
    tableView.frame = someframe;
}

Обратите внимание, я также пробовал -searchDisplayController:didLoadSearchResultsTableView, но это ничего не дало. Чтобы изменить размер таблицы, нужно дождаться ее отображения.

Также обратите внимание, что если просто присвоить tableView.frame = otherTableView.frame, то таблица результатов поиска перекрывает соответствующую ей строку поиска, поэтому очистить или отменить поиск невозможно!

Мой окончательный код выглядел так:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {

    CGRect f = self.masterTableView.frame;  // The tableView the search replaces
    CGRect s = self.searchDisplayController.searchBar.frame;
    CGRect newFrame = CGRectMake(f.origin.x,
                                 f.origin.y + s.size.height,
                                 f.size.width,
                                 f.size.height - s.size.height);

    tableView.frame = newFrame;
}
51
ответ дан 2 December 2019 в 03:06
поделиться

Не уверен, что полностью понимаю, что вы описываете, было бы неплохо сделать снимок экрана.

Похоже, что происходит то, что UITableView - это размер экрана, а баннер перекрывает его нижние 50 пикселей. Все дочерние элементы UIView имеют фрейм, границы и свойства центра, которые они наследуют от своего общего родителя UIView.

@interface UIView(UIViewGeometry)

// animatable. do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead.
@property(nonatomic) CGRect            frame;

// use bounds/center and not frame if non-identity transform. if bounds dimension is odd, center may be have fractional part
@property(nonatomic) CGRect            bounds;      // default bounds is zero origin, frame size. animatable
@property(nonatomic) CGPoint           center;      // center is center of frame. animatable
@property(nonatomic) CGAffineTransform transform;   // default is CGAffineTransformIdentity. animatable
// ... from UIView.h

Вы можете манипулировать этими свойствами по своему усмотрению. Похоже, вам просто нужно отрегулировать границы, чтобы они были на 50 пикселей меньше экрана, и выполнить некоторые математические вычисления, чтобы вычислить ваш новый центр.

0
ответ дан 2 December 2019 в 03:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: