1

У меня вопрос о автоматической компоновке. Я использую xib-файлы, и у меня есть контроллер вида.Элементы управления позиционированием под навигационной панелью

enter image description here

Его встроенный внутри UINavigationController поэтому у меня есть кнопка, расположенная с верхним пространством для SuperView ограничения.

Проблема в том, когда я поворачиваю устройство, это выглядит так.

enter image description here

Как вы можете видеть, что ограничение по-прежнему сохраняет свое первоначальное значение, так что есть большая разница между краем панели навигации и кнопками в ландшафтном режиме.

Как я могу сделать положение кнопки близко к навигационной панели, например, когда она находится на портрете, и так ли это в портретном и ландшафтном режимах? Кстати, я использую Xcode 6.

спасибо.

+0

каков значение мультипликатора вашего ограничения? – deimus

+0

Значение множителя равно 1. – Isuru

+0

Truy, чтобы установить его на ноль – deimus

ответ

5

Если вы хотите, чтобы определить ваши Автокомпоновка верхние ограничения полей в файле XIb, вы можете добавить следующий код в файл класса родственника ViewController к вашему XIb:

override func viewDidLoad() { 
    super.viewDidLoad() 

    if self.respondsToSelector("edgesForExtendedLayout") { 
     edgesForExtendedLayout = UIRectEdge.None 
    } 
} 

Simple. Но проблема в том, что вы не сможете получить полупрозрачную навигационную панель.

К счастью, есть несколько альтернатив этому. Вы можете определить верхнюю марку вашего автомата как относительно вашего руководства по макету (не для вашего вида) с помощью раскадровки или с кодом.

Если вы переместитесь на Раскадровка, нажмите на кнопку Pin, выберите ограничение верхнего края и выберите «Руководство по верхней макете» (см. Рисунок ниже).

enter image description here

Если вы решили определить все ограничения ваших UIButton «S с кодом, вы можете использовать Визуальный формат Язык, как показано в следующем коде:

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     var button = UIButton() 
     button.backgroundColor = UIColor.blueColor() 

     button.setTranslatesAutoresizingMaskIntoConstraints(false) 
     view.addSubview(button) 

     var viewsDict = ["button" : button, "topLayoutGuide" : topLayoutGuide] 

     view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[topLayoutGuide]-20-[button]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict)) 
     view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[button]-20-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict)) 
    } 

} 

Наконец, есть четвертый (вид смешанного) способа выполнить то, что вы хотите сделать. Установите ограничения в вашем XIb, перетащите верхнее поле ограничение и ваш UIButton на ваш взгляд класс контроллера (имя их topConstraint и button) и установить свой код, как:

import UIKit 

class ViewControllerTwo: UIViewController { 

    @IBOutlet weak var topConstraint: NSLayoutConstraint! 
    @IBOutlet weak var button: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.topLayoutGuide, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10)) 
     view.removeConstraint(topConstraint) 
    } 

} 
+0

Еще раз спасибо! Я использую xib-файлы, поэтому я принял последний. Работает как шарм. – Isuru

+1

Четвертый вариант действительно полезен. – James

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