2015-04-12 2 views
1

Я пытаюсь написать свое собственное меню iOS, и там у меня есть горизонтальный UITableView как подзаголовок моего пользовательского UIView (мое меню). Теперь в layoutSubviews() я должен выложить свой UITableView (я использую NSLayoutConstraint.constraintsWithVisualFormat для всех других подзаголовков), но проблема в том, что высота tableViews на самом деле является «шириной», потому что она была повернута боком 90 градусов с myTableView.transform = CGAffineTransformMakeRotation (-CGFloat (M_PI_2)).iOS: как программировать автоматическую компоновку горизонтального представления таблицы?

Мои layoutSubviews():

override func layoutSubviews() { 
    super.layoutSubviews() 

    let viewsDictionary = ["navigationTableView":navigationTableView, "settingsTableView":settingsTableView, "settingsTableViewContainerView":settingsTableViewContainerView, "settingsViewContainerView":settingsViewContainerView] 
    let metricsDictionary = ["navigationTableViewHeight":100.0, "settingsTableViewContainerViewHeight":70.0, "settingsViewContainerViewHeight":0.0, "viewWidth":screen.bounds.width] 

    navigationTableView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    settingsTableView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    settingsViewContainerView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    settingsTableViewContainerView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    // sizing constraints 

    // navigationTableView 
    let navigationTableView_constraint_H: Array = NSLayoutConstraint.constraintsWithVisualFormat("H:[navigationTableView(viewWidth)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 
    let navigationTableView_constraint_V: Array = NSLayoutConstraint.constraintsWithVisualFormat("V:[navigationTableView(>=navigationTableViewHeight)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 

    navigationTableView.addConstraints(navigationTableView_constraint_H) 
    navigationTableView.addConstraints(navigationTableView_constraint_V) 

    // settingsTableViewContainerView 
    let settingsTableViewContainerView_constraint_H: Array = NSLayoutConstraint.constraintsWithVisualFormat("H:[settingsTableViewContainerView(viewWidth)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 
    let settingsTableViewContainerView_constraint_V: Array = NSLayoutConstraint.constraintsWithVisualFormat("V:[settingsTableViewContainerView(settingsTableViewContainerViewHeight)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 

    settingsTableViewContainerView.addConstraints(settingsTableViewContainerView_constraint_H) 
    settingsTableViewContainerView.addConstraints(settingsTableViewContainerView_constraint_V) 

    // settingsTableView 
    /*let settingsTableView_constraint_H: Array = NSLayoutConstraint.constraintsWithVisualFormat("H:[settingsTableView(settingsTableViewContainerViewHeight)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 
    let settingsTableView_constraint_V: Array = NSLayoutConstraint.constraintsWithVisualFormat("V:[settingsTableView(viewWidth)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 

    settingsTableView.addConstraints(settingsTableView_constraint_H) 
    settingsTableView.addConstraints(settingsTableView_constraint_V)*/ 

    // settingsViewContainerView 
    let settingsViewContainerView_constraint_H: Array = NSLayoutConstraint.constraintsWithVisualFormat("H:[settingsViewContainerView(viewWidth)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 
    let settingsViewContainerView_constraint_V: Array = NSLayoutConstraint.constraintsWithVisualFormat("V:[settingsViewContainerView(settingsViewContainerViewHeight)]", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 

    settingsViewContainerView.addConstraints(settingsViewContainerView_constraint_H) 
    settingsViewContainerView.addConstraints(settingsViewContainerView_constraint_V) 

    switch settingsTableViewPosition { 
     case .Top: 
      //Todo 
     break 
     case .Bottom: 
      // positioning 
      let settingsTableView_constraint_H: Array = NSLayoutConstraint.constraintsWithVisualFormat("H:|[settingsTableView]|", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 
      let settingsTableView_constraint_V: Array = NSLayoutConstraint.constraintsWithVisualFormat("V:|[settingsTableView]|", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 

      settingsTableViewContainerView.addConstraints(settingsTableView_constraint_H) 
      settingsTableViewContainerView.addConstraints(settingsTableView_constraint_V) 

      let view_constraint_H_navigationTableView: Array = NSLayoutConstraint.constraintsWithVisualFormat("H:|[navigationTableView]|", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 
      let view_constraint_H_settingsTableView: Array = NSLayoutConstraint.constraintsWithVisualFormat("H:|[settingsTableViewContainerView]|", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 
      let view_constraint_H_settingsViewContainerView: Array = NSLayoutConstraint.constraintsWithVisualFormat("H:|[settingsViewContainerView]|", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 
      let view_constraint_V: Array = NSLayoutConstraint.constraintsWithVisualFormat("V:|[navigationTableView][settingsTableViewContainerView][settingsViewContainerView]|", options: NSLayoutFormatOptions(0), metrics: metricsDictionary, views: viewsDictionary) 

      self.addConstraints(view_constraint_H_settingsTableView) 
      self.addConstraints(view_constraint_H_navigationTableView) 
      self.addConstraints(view_constraint_H_settingsViewContainerView) 
      self.addConstraints(view_constraint_V) 
     break 
    } 
} 

ответ

0

Я предлагаю вам использовать UICollectionView вместо UITableView. Это полностью решит вашу проблему. По моему опыту вы получите много ошибок в функции, если будете «поворачивать столик в сторону на 90 градусов».

Я не уверен, но вы можете для своей проблемы, вы можете попробовать добавить tableview в контейнер. Соедините левые, верхние, нижние, правые ограничения ширины таблицы с контейнером .constant = 0. Затем установите ограничения для вашего контейнера, как обычно. , если это не поможет установить ограничение tableview.height на ограничение container.width и tableview.width на container.height.

+0

Спасибо за ваш ответ, но я уже протестировал то, что вы предлагаете, и проблема в том, что UITableView .Top - это где .Trailing должно быть после того, как оно повернуто на 90 градусов. Но я проверю UICollectionView, и если это не сработает для меня, я напишу свой собственный UIHorizontalTableView, унаследованный от UIScrollView –

0

Вы также можете попробовать использовать пользовательский вид контейнера для UITableView. Настройте необходимые ограничения для пользовательского представления контейнера. В методе layoutSubviews пользовательского представления контейнера после вызова его суперустановки ширины и высоты установки для uitableivew (tableview.height = container.width, tableview.width = container.height). Я имею в виду не использовать ограничения для uitableview.

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