2015-04-12 75 views
1

我想寫我自己的iOS菜單,在那裏我有一個水平的UITableView作爲我的自定義UIView(我的菜單視圖)的子視圖。現在在layoutSubviews()我必須佈置我的UITableView(我使用NSLayoutConstraint.constraintsWithVisualFormat所有其他子視圖),但問題是,tableViews的高度ist實際上它是'寬度',因爲它被橫向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

我建議你,而不是使用的UITableView UICollectionView。 這將完全解決您的問題。 根據我的經驗,如果您將「將桌面向側面轉90度」,您將會遇到很多功能錯誤。

我不確定,但你可以爲你的問題,你可以嘗試添加tableview到容器。 將tableview的左,上,下,右約束連接到容器寬度.constant = 0.然後像往常一樣爲容器設置約束。 如果它不會幫助將container.width約束和tableview.width的tableview.height約束設置爲container.height。

+0

感謝您的回覆,但我已經測試了您的建議,並且問題在於UITableView的.Top是.Trailing在轉過90度後應該在的位置。但我會看看UICollectionView,如果這對我不起作用,我會寫我自己的UIHorizo​​ntalTableView從UIScrollView繼承 –

0

您還可以嘗試爲UITableView使用自定義容器視圖。 爲自定義容器視圖設置必需的約束。 在自定義容器視圖的layoutSubviews方法調用它的超級實現安裝寬度和高度爲uitableivew後(tableview.height = container.width,tableview.width = container.height)。 我的意思是不要使用約束uitableview。

相關問題