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