iOS:如何以编程方式自动布局水平表视图?

iOS:如何以编程方式自动布局水平表视图?,ios,swift,autolayout,tableview,Ios,Swift,Autolayout,Tableview,我正在尝试编写自己的iOS菜单,在那里我有一个水平的UITableView作为我的自定义UIView我的菜单视图的子视图。现在在布局子视图中,我必须布局我的UITableView,我对所有其他子视图使用NSLayoutConstraint.Constraints和VisualFormat,但问题是,表视图的“高度”实际上是“宽度”,因为它被myTableView侧向旋转了90度。transform=CGAffineTransformMakeRotation-CGFloatM_PI_2 我的布局子

我正在尝试编写自己的iOS菜单,在那里我有一个水平的UITableView作为我的自定义UIView我的菜单视图的子视图。现在在布局子视图中,我必须布局我的UITableView,我对所有其他子视图使用NSLayoutConstraint.Constraints和VisualFormat,但问题是,表视图的“高度”实际上是“宽度”,因为它被myTableView侧向旋转了90度。transform=CGAffineTransformMakeRotation-CGFloatM_PI_2

我的布局子视图:

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
    }
}

我建议您使用UICollectionView而不是UITableView。 这将完全解决你的问题。 根据我的经验,如果将tableview横向旋转90度,您将在功能中遇到很多错误

我不确定,但您可以针对您的问题尝试将tableview添加到容器中。 将tableview的左、上、下、右约束连接到容器宽度。常量=0。然后像往常一样为容器设置约束。
如果无法帮助将tableview.height约束设置为container.width约束和tableview.width设置为container.height。

您也可以尝试将自定义容器视图用于UITableView。 设置自定义容器视图所需的约束。 调用自定义容器视图的超级实现后,在layoutSubviews方法中为UITableView设置宽度和高度。高度=容器。宽度,tableview.width=容器。高度。
我的意思是不要对uitableview使用约束

谢谢你的回复,但我已经测试了你的建议,问题是UITableView的.Top是.Trailing在旋转90度后的位置。但我会查看UICollectionView,如果这对我不起作用,我会编写自己的UIHorizontalTableView,它继承自UIScrollView