2016-03-04 4 views
1

я использую NSLayoutconstraint, но это, кажется, запутались положение взглядов при переходе с айфона 6 плюс Iphone 6.NSLayoutConstraint выпуск на различных устройствах

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

Вот некоторые из примеров ограничения:

v=getBitmapView("V -.-") 
    self.view.addSubview(v) 
    var myConstraint = 
     NSLayoutConstraint(item: v, 
      attribute: NSLayoutAttribute.CenterX, 
      relatedBy: NSLayoutRelation.Equal, 
      toItem: self.view, 
      attribute: NSLayoutAttribute.CenterX, 
      multiplier: 1.0, 
      constant: 0) 



    self.view.addConstraint(myConstraint) 
    myConstraint = 
    NSLayoutConstraint(item: v, 
     attribute: NSLayoutAttribute.BottomMargin, 
     relatedBy: NSLayoutRelation.Equal, 
     toItem: self.view, 
     attribute: NSLayoutAttribute.BottomMargin, 
     multiplier: 1.0, 
     constant: -30) 



    self.view.addConstraint(myConstraint) 
    myConstraint = 
     NSLayoutConstraint(item: v, 
      attribute: NSLayoutAttribute.Width, 
      relatedBy: NSLayoutRelation.Equal, 
      toItem: self.view, 
      attribute: NSLayoutAttribute.Width, 
      multiplier: 1.0, 
      constant: -200) 



    self.view.addConstraint(myConstraint) 
    myConstraint = 
     NSLayoutConstraint(item: v, 
      attribute: NSLayoutAttribute.Height, 
      relatedBy: NSLayoutRelation.Equal, 
      toItem: self.view, 
      attribute: NSLayoutAttribute.Height, 
      multiplier: 1.0, 
      constant: -650) 



    self.view.addConstraint(myConstraint) 

Если я побежал Iphone 6 плюс вид позиционируется 30 пункт выше нижнего края, но если использовать Iphone 6 вид исчезает.

+1

Не нажимайте на такой высоте. Для этого последнего ограничения используйте '.Top' или' .TopMargin' (и, очевидно, не используйте '-650', но любой верхний маркер имеет смысл). – Rob

+0

Как установить ширину и высоту без жесткого кодирования? У вас есть пример? Предположим, я хочу видеть 1/3 половины экрана, которая составляет 1/6 экрана – Kerby82

ответ

1

Проблема в том, что вы строго кодировали высоту и ширину. Вместо того, чтобы использовать константы для ширины и высоты, определите их как кратность некоторого другого представления для супервизора.

Как установить ширину и высоту без жесткого кодирования? У вас есть пример? Предположим, что я хочу иметь вид 1/3 половины экрана, который составляет 1/6 экрана.

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

NSLayoutConstraint.activateConstraints([ 
    blueView.topAnchor.constraintEqualToAnchor(view.topAnchor),        // pin to top left corner 
    blueView.leftAnchor.constraintEqualToAnchor(view.leftAnchor), 

    blueView.widthAnchor.constraintEqualToAnchor(view.widthAnchor, multiplier: 1.0/3.0), // one third the width 
    blueView.heightAnchor.constraintEqualToAnchor(view.heightAnchor, multiplier: 1.0/2.0) // one half the height 
]) 

Это дает:

enter image description here

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

NSLayoutConstraint.activateConstraints([ 
    blueView.topAnchor.constraintEqualToAnchor(view.topAnchor),    // pin blue and red to the top 
    redView.topAnchor.constraintEqualToAnchor(view.topAnchor), 

    blueView.leftAnchor.constraintEqualToAnchor(view.leftAnchor),   // pin blue to left edge 
    redView.leftAnchor.constraintEqualToAnchor(blueView.rightAnchor),  // pin red adjacent to blue view 
    redView.rightAnchor.constraintEqualToAnchor(view.rightAnchor),   // pin red to right edge 
    redView.widthAnchor.constraintEqualToAnchor(blueView.widthAnchor, multiplier: 2.0), // but make red twice as wide as blue (i.e. 2/3rds entire view) 

    greenView.topAnchor.constraintEqualToAnchor(blueView.bottomAnchor),  // define green to be below blue 
    greenView.topAnchor.constraintEqualToAnchor(redView.bottomAnchor),  // and red views 

    greenView.heightAnchor.constraintEqualToAnchor(blueView.heightAnchor), // but make it same height as blue 

    greenView.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor),  // and pin it to the bottom of superview 

    greenView.leftAnchor.constraintEqualToAnchor(view.leftAnchor),   // and green spans entire superview 
    greenView.rightAnchor.constraintEqualToAnchor(view.rightAnchor) 
]) 

enter image description here

Очевидно, что если вы хотели бы создать экземпляр NSLayoutConstraint, а затем сделать addConstraint, как у вас есть в вашем исходном примере, то не стесняйтесь. Вышеприведенный синтаксис (представленный в iOS 9) является лишь более кратким представлением, но концепция такая же, как и выше, а именно, нужно при необходимости привязать кромки, но только определить ширину/высоту как кратное другому виду, не используя некоторые жестко закодированная константа.

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