2017-02-09 2 views
0

У меня есть контроллер просмотра, открытый из Popover segue - на iPhone это отображает это как полноэкранный просмотрщик (в основном модально). На iPad он открывается как popover.Swift 3: UISearchBar в Popover ViewController отображается выше, чем ожидалось (на iPad)

При открытии вида на iPad крепление для яхты становится шире, чем вид на попкор. Это не происходит ни на одном из размеров экрана iPhone - только iPad (как Popover).

iPad Popover View

Если я принести UISearchBar сосредоточиться (нажмите на текстовое поле) вопрос решает сам, пока вид не будет снова открыта:

iPad SearchBar in Focus

iPad SearchBar after Focus

UISearchBar является добавляется программно в UIView желаемых размеров.

SearchBarView

Вот код для инициализации SearchController

 self.resultSearchController = ({ 
     let controller = UISearchController(searchResultsController: nil) 
     controller.searchResultsUpdater = self 
     controller.dimsBackgroundDuringPresentation = false 
     controller.searchBar.sizeToFit() 
     controller.definesPresentationContext = false; 

     searchBarView.addSubview(controller.searchBar) 
     return controller 
    })() 

Я попытался удалить .sizeToFit() и вместо проклейки, основанный на CGSize

controller.searchBar.sizeThatFits(CGSize(width: 375, height: 44) 

это не работает Однако. Я также попытался вызвать view.setNeedsLayout() и view.LayoutIfNeeded(). Ни один из них не имеет никакого эффекта.

Я мог бы решить эту проблему, сделав UISearchBar активным в viewDidLoad, но я искал решение, менее подходящее.

Спасибо!

ответ

0

Ну, это был интересный урок по отладке пользовательских интерфейсов.

Я полагаю, что это в конечном итоге было вызвано установкой ViewController на размер, предполагаемый и фиксированный размер. На разных размерах экрана iPad (9,7 "против 12,9").

Чтобы решить эту проблему, я установил ширину рамки строки поиска в виде таблицы ниже. Я не уверен, почему размер searchbarview изменил ширину, так как она ограничена ведущим и задним фронтом (супервизор).

 if UIDevice.current.userInterfaceIdiom == .pad { 
     self.resultSearchController.searchBar.frame = CGRect(x: 0, y: 0, width: Int(tableView.frame.width), height: 44) 
    } 

Хотя это работает он имеет тот же вопрос, если используется режим просмотра (для ширин, где поповер имеет место для отображения).

Дальнейшие предложения приветствуются, но это хорошее начало.

--- Edit ---

Непроверка «Изменение размера Вид с СИБ» под макет в ViewController, а также установление размеров для Freeform и объявить постоянную ширину решен вопрос ВК изменения размера на IPad , Оттуда я просто установить рамку панели поиска в viewDidLoad следующим образом:

if UIDevice.current.userInterfaceIdiom == .pad { 
     self.resultSearchController.searchBar.frame = CGRect(x: 0, y: 0, width: 375, height: 44) 
    } 

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

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