2014-09-21 3 views
6

Я использую раскадровку и Xcode 6 для разработки приложений, но я столкнулся с этой проблемой: я хочу назначить разные позиции подсмотров для портретных и ландшафтных режимов. Например:Различные портретные/пейзажные виды в раскадровке и быстрые

Portrait Landscape

Поскольку теперь я достиг этого программно с willRotateToInterfaceOrientation и строки состояния, чтобы получить ориентацию Скины.

С Xcode 6, макеты iPhone для портрета и пейзажа разные, но одинаковы для iPad (обычные, обычные). Можно ли достичь этих позиций с ограничениями?

Спасибо.

ответ

7

Да, вы можете сделать это с ограничениями.

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

Constraint Setup

Далее связать ограничения, которые вы будете модифицирующие к IBOutlets поэтому мы можем изменить их программно. Для примера, это будут ограничения:

@IBOutlet var greenViewTrailingConstraint: NSLayoutConstraint! 
@IBOutlet var greenViewBottomConstraint: NSLayoutConstraint! 

@IBOutlet var redViewTopConstraint: NSLayoutConstraint! 
@IBOutlet var redViewLeadingConstraint: NSLayoutConstraint! 
@IBOutlet var redViewBottomConstraint: NSLayoutConstraint! 

@IBOutlet var blueViewTrailingConstraint: NSLayoutConstraint! 
@IBOutlet var blueViewTopConstraint: NSLayoutConstraint! 
@IBOutlet var blueViewLeadingConstraint: NSLayoutConstraint! 

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

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) { 
    let padding: CGFloat = 16.0 

    // since we're calling this before the rotation, the height and width are swapped 
    let viewHeight = self.view.frame.size.width 
    let viewWidth = self.view.frame.size.height 

    // if landscape 
    if UIInterfaceOrientationIsLandscape(toInterfaceOrientation) { 
     greenViewTrailingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
     greenViewBottomConstraint.constant = padding 

     blueViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     blueViewTrailingConstraint.constant = padding 
     blueViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 

     redViewTopConstraint.constant = padding 
     redViewBottomConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     redViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
    } else { // else portrait 
     greenViewBottomConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     greenViewTrailingConstraint.constant = padding 

     blueViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     blueViewTrailingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
     blueViewLeadingConstraint.constant = padding 

     redViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
     redViewBottomConstraint.constant = padding 
     redViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
    } 
} 
+0

Nice решение! ! Но мне было просто интересно, полезно ли добавлять и удалять ограничения программно во время вращения устройства. –

+0

@RashmiRanjanmallick, Хороший вопрос! Однако мы не добавляем/удаляем ограничения. Мы просто модифицируем их константы. Изменение констант ограничения является обычной практикой, особенно в анимации UIView или вращении устройства. –

+0

Спасибо, я просто удивляюсь, почему на земле они не делали раскадровку, как выбирать портретный режим, а также настраивали портретную макет, а также выбирали ландшафтный режим и настраивали ландшафтный макет. – fullMoon

1

Я знаю, что это старый пост, но только для info.I попытался следующие шаги, и она работает, как ожидалось.

Step1. Выберите «Просмотр контроллера», выберите любой элемент управления размером. И добавьте представления в этом режиме. Any Mode Шаг2. Измените режим, чтобы записать все iPhone с помощью управления классом размера, добавьте ограничения для режима просмотра в портретном режиме. Potrait mode Шаг 3. Аналогичным образом измените режим, чтобы изменить ландшафт всех iPhone, добавьте ограничения для представления для ландшафтного режима.

Обратите внимание: ограничения независим для портретной и альбомной

0

Нажмите плюс «+» рядом с Константы из ограничений и добавить варианты для разных экранов:

enter image description here

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