10

我想问你是否可以设置垂直堆栈视图中每个容器的百分比高度?我想在堆栈视图中有 3 个容器。第一个应该占屏幕尺寸的 40%,第二个占 20%,第三个占 40%。谢谢

在此处输入图像描述

4

2 回答 2

16

“按比例填充”分布类型适用于固有内容大小

因此,如果我们的垂直堆栈(例如高度 600)视图有 2 个视图,即 ViewA(固有内容高度 200)和 ViewB(固有内容高度 100),则堆栈视图会将它们的大小调整为 ViewA(高度 400)和 ViewB(高度 200)。

还,

  1. 如果所有视图都没有固有内容高度,垂直堆栈视图将始终显示 IB 错误“需要约束:Y 位置或高度”。
  2. 没有固有高度的视图将折叠到零高度。
  3. 具有内在高度的视图将按比例分布。

你真正想要的

是具有两个约束的“填充”类型分布。

  1. ViewA.height = 2* ViewB.height
  2. ViewB.height = 0.5 * ViewC.height

就这样。希望能帮助到你。

在此处输入图像描述

于 2015-12-03T07:11:40.670 回答
1

您还可以以编程方式实现它,您可以消除一个文本字段,然后将其返回并填充平均分布的堆栈视图,如下所示:

class LoginViewController: UIViewController{

@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
nameTextField.translatesAutoresizingMaskIntoConstraints = false
emailTextField.translatesAutoresizingMaskIntoConstraints = false
passwordTextField.translatesAutoresizingMaskIntoConstraints = false
}

// IBAction 
@IBAction func registerLoginSegmented(_ sender: Any) {

    if (sender as AnyObject).selectedSegmentIndex == 0{
        // Before we resize (shrink) the nameTextField, change the stackview' distribution from "fill equally" to just "fill"
        stackView.distribution = .fill

        // Change the nameTextField's text
        heightConstraintNameTextField = nameTextField.heightAnchor.constraint(equalToConstant: 0)
        heightConstraintNameTextField?.isActive = true

        // Rearrange the height of the emailTextField
        heightConstraintEmailTextField = emailTextField.heightAnchor.constraint(equalToConstant: 50)
        heightConstraintEmailTextField?.isActive = true

        // Rearrange the height of the passwordTextField
        heightConstraintPasswordTextField = passwordTextField.heightAnchor.constraint(equalToConstant: 50)
        heightConstraintPasswordTextField?.isActive = true

    }
    else {
          // Return the nameTextField by simply trun off the constrants and assign "fillEqually" instead of "fill"
        heightConstraintNameTextField?.isActive = false
        heightConstraintEmailTextField?.isActive = false
        heightConstraintPasswordTextField?.isActive = false
        stackView.distribution = .fillEqually

    }

}
于 2017-07-20T03:44:03.953 回答