2015-10-10 2 views
-1

Я делаю свой интерфейс в коде, и я пришел к проблеме, что мой UIViewController едет за моей панелью UINavigationController.UIViewController за UINavigationController Bar - правильный путь

Я немного погуглел, и, похоже, есть три решения. Все, однако, относится к переходу с iOS 6 на iOS 7, и все это похоже на взлом. Я не могу себе представить, что это все еще так, как нужно.

Решения устраняют прозрачность, которую я не хочу делать. В какой-то момент времени мне может потребоваться прокрутка содержимого, а затем покажется слегка размытым на фоне панели навигации. Другое решение - все перемещать, добавляя «поддельные» дополнения. Это также не идеально, так как я не знаю, будет ли мой контент ни разу не выходить за пределы экрана, а затем, как упоминалось ранее, я хотел бы, чтобы содержимое заходило за панель навигации. Тогда есть последнее решение self.edgesForExtendedLayout = UIRectEdge.None, которое кажется ужасно похожим на хак.

Может быть, это, однако, из-за того, как я инициирую мой UIViewController поэтому я добавлю код, я использую в моем AppDelegate здесь:

var window: UIWindow? 
var navigationController: UINavigationController? 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    window = UIWindow() 

    if let window = window { 
     window.backgroundColor = UIColor.whiteColor() 

     let vc = CustomUIViewController() 
     navigationController = UINavigationController(rootViewController:vc) 

     if let _ = navigationController { 
      window.rootViewController = navigationController 
     } 
     window.makeKeyAndVisible() 
    } 
    return true 
} 

В настоящее время я использую self.edgesForExtendedLayout = UIRectEdge.None в viewDidLoad() обходный, но он не чувствует себя хорошо.

Благодарим за любые советы по правильному решению этой проблемы.

+0

Если первое подзаголовок вашего UIViewController - это UIScrollView, вы можете установить автоматическиAdjustScrollViewInsets на YES, а прокрутка должна быть хорошо вставлена ​​ –

ответ

0

Нет ничего плохого в том, что установка расширенных кромок на None - вот что это за настройка: для.

Еще один очень хороший подход, если ваш контент является статичным, - это использовать автоматический макет и привязать верхние части представлений основного вида вашего контроллера представления к руководству верхнего плана контроллера представления. Нижняя часть верхней направляющей макета позиционируется автоматически, чтобы соответствовать нижней части панели навигации, когда она присутствует. Это «современный путь». Преимущество состоит в том, что он продолжает работать, когда панель навигации исчезает (т. Е. В ландшафте).

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

+0

. Можете ли вы привести пример для второго подхода? – Joseph

+0

Я нашел эту ссылку ранее: https://developer.apple.com/library/ios/qa/qa1797/_index.html Проблема в том, что я не использую IB, и я попытался решить ее с помощью 'topLayoutGuide 'упоминается в обсуждении в« Справочнике классов UIViewController », но я не увенчался успехом. https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instp/UIViewController/topLayoutGuide – Joseph

+0

это не принесло желаемого результата: 'oneOfMyViews. topAnchor.constraintEqualToAnchor (self.topLayoutGuide.bottomAnchor) ' – Joseph

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