2016-06-25 6 views
1

enter image description hereИзменение высоты контейнера динамически

Я пытаюсь динамически изменять высоту контейнера, чтобы соответствовать высоте представления таблицы. В настоящее время я пытаюсь сделать это с помощью prepareForSegue() в диспетчере просмотра новостей. Однако newsfeedContainer.frame.height = 10 не работает.

Редактировать: Я пытаюсь отредактировать ограничение. Я получаю следующую ошибку в следующем коде.

Ошибка: EXC_BAD_INSTRUCTION

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "NewsfeedSegue" { 
      print("NewsfeedSegue Triggered") 
      var newsfeedTableController: NewsfeedTableViewController? 
      newsfeedTableController = segue.destinationViewController as? NewsfeedTableViewController 
      if newsfeedTableController != nil { 
       containerHeightConstraint.constant = newsfeedTableController!.newsfeedTableView.frame.height 
      } 
     } 
    } 

Edit 2: Я сделал это с помощью следующего кода в контроллер вид таблицы viewDidLoad()

let viewController = parentViewController as? NewsfeedViewController 
     viewController?.containerHeightConstraint.constant = newsfeedTableView.frame.height 
+0

Использовать представление сделал макетные представления и установить высоту. Если вы используете ограничения, добавьте выход к ограничению и измените константу. – Brandon

+0

Вы пытались снизить приоритет вертикального сопротивления сжатию на контейнере в построителе интерфейса? – Luke

+0

@Brandon Я пытаюсь установить ограничение, но я думаю, что получаю ошибку, получая высоту таблицы. См. Править. –

ответ

1

Если вы используете AutoLayout (и вы почти наверняка есть, это по умолчанию), а затем изменение рамки представления обычно не работает. Как только что-то запускает обновление макета, ограничения (либо те, которые вы указываете, либо ограничения, связанные с системой) принимают и возвращают фрейм к его предыдущим значениям.

Как отмечает Брэндон в своем комментарии, если вы используете AutoLayout, вам нужно добавить одно или несколько ограничений, создать эти ограничения, а затем изменить постоянное значение ограничения.

+0

Да, у меня включен AutoLayout. Я начал настраивать систему для установки ограничения. Когда я пытаюсь использовать viewController.frame.height в TableView, я получаю ошибку, которую я вставляю в редактирование. –

+0

Вы не можете (и не должны) манипулировать выходами из prepareForSegue или снаружи контроллера вида. Вместо этого вы должны добавить свойство в целевой VC и установить ограничение в viewDidLoad. –

+0

Как мне получить IBOutlet для контейнера в Table Controller? –

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