我正在尝试编写自己的iOS菜单,在那里我有一个水平的UITableView作为我的Custom UIView(我的菜单视图)的子视图。现在在layoutSubviews()中我必须布置我的UITableView(我正在使用NSLayoutConstraint.constraintsWithVisualFormat用于所有其他子视图)但问题是tableViews的“高度”实际上是'宽度'因为它被侧向转向使用myTableView.transform = CGAffineTransformMakeRotation(-CGFloat(M_PI_2))90度。
我的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 :(得分:0)
我建议您使用UICollectionView而不是UITableView。 这将完全解决您的问题。 根据我的经验,如果你将"将桌面视图横向翻转90度"
,你会在功能上遇到很多错误。我不确定,但您可以尝试将tableview添加到容器中。 将tableview的左,上,下,右约束连接到容器宽度.constant = 0.然后像往常一样为容器设置约束。 如果它无法帮助将tableview.height约束设置为container.width约束,将tableview.width设置为container.height。
答案 1 :(得分:0)
您还可以尝试为UITableView使用自定义容器视图。 为自定义容器视图设置必需的约束。 在自定义容器视图的layoutSubviews方法中调用它的uitableivew的超级实现设置宽度和高度(tableview.height = container.width,tableview.width = container.height)。 我的意思是不要对uitableview使用约束。