以编程方式创建布局,使用堆栈视图和约束不起作用

用户9132804

我正在尝试在 Swift 中以编程方式创建此布局。

https://codepen.io/anon/pen/NXRQbJ

第一个矩形很小。其他 2 个矩形的大小相同,但比第一个矩形大。

这是整个视图控制器。我没有使用故事板。我所有的代码都在这个视图控制器中。

import UIKit

class ViewController: UIViewController {

    lazy var stackView: UIStackView = {
        let stackView = UIStackView(arrangedSubviews: [smallRectangleView, bigRectangleView, bigRectangleView2])
        stackView.alignment = .fill
        stackView.distribution = .fillProportionally
        stackView.axis = .vertical
        stackView.translatesAutoresizingMaskIntoConstraints = false
        return stackView
    }()

    var smallRectangleView: UIView = {
        let view = UIView()
        view.backgroundColor = .orange
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    var bigRectangleView: UIView = {
        let view = UIView()
        view.backgroundColor = .green
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    var bigRectangleView2: UIView = {
        let view = UIView()
        view.backgroundColor = .purple
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        setupLayout()
        print(stackView.frame)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func setupLayout() {
        // Stack View
        view.addSubview(stackView)
        stackView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

        // Small Recntangle View
        let heightConstraint1 = NSLayoutConstraint(item: smallRectangleView, attribute: .height, relatedBy: .equal, toItem: bigRectangleView, attribute: .height, multiplier: 4.0, constant: 0.0)

        // Big Rectangle View
        let heightConstraint2 = NSLayoutConstraint(item: bigRectangleView, attribute: .height, relatedBy: .equal, toItem: bigRectangleView2, attribute: .height, multiplier: 0.0, constant: 0.0)

        view.addConstraints([heightConstraint1, heightConstraint2])
    }
}

heightConstraint1 和 heightConstraint2 导致错误。我不知道为什么。

// Small Recntangle View
let heightConstraint1 = NSLayoutConstraint(item: smallRectangleView, attribute: .height, relatedBy: .equal, toItem: bigRectangleView, attribute: .height, multiplier: 4.0, constant: 0.0)

// Big Rectangle View
let heightConstraint2 = NSLayoutConstraint(item: bigRectangleView, attribute: .height, relatedBy: .equal, toItem: bigRectangleView2, attribute: .height, multiplier: 0.0, constant: 0.0)

view.addConstraints([heightConstraint1, heightConstraint2])

当我在模拟器上运行这个应用程序时,没有任何显示。这只是一个空白的白色屏幕。在调试器中也存在约束问题。

瓦瓦马

主要问题似乎是stackView.distribution. 我把它从.fillProportionally改为 just .fill我怀疑问题是由于您的限制,这些观点已经相互关联并导致冲突。

我所做的其他更改,您multiplier的约束之一需要是0.25而不是4,而在第二个约束,乘数需要是1而不是0

我还用来NSLayoutConstraint.activate激活最后 2 个约束,而不是将它们添加到view. 通常,您希望激活约束而不是将它们添加到视图中。让 iOS 找出要将它们添加到哪些视图。

class ViewController: UIViewController {

    lazy var stackView: UIStackView = {
        let stackView = UIStackView(arrangedSubviews: [smallRectangleView, bigRectangleView, bigRectangleView2])
        stackView.alignment = .fill
        stackView.distribution = .fill
        stackView.axis = .vertical
        stackView.translatesAutoresizingMaskIntoConstraints = false
        return stackView
    }()

    var smallRectangleView: UIView = {
        let view = UIView()
        view.backgroundColor = .orange
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    var bigRectangleView: UIView = {
        let view = UIView()
        view.backgroundColor = .green
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    var bigRectangleView2: UIView = {
        let view = UIView()
        view.backgroundColor = .purple
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        setupLayout()
        print(stackView.frame)
    }

    func setupLayout() {
        // Stack View
        view.addSubview(stackView)
        stackView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

        // Small Recntangle View
        let heightConstraint1 = NSLayoutConstraint(item: smallRectangleView, attribute: .height, relatedBy: .equal, toItem: bigRectangleView, attribute: .height, multiplier: 0.25, constant: 0.0)

        // Big Rectangle View
        let heightConstraint2 = NSLayoutConstraint(item: bigRectangleView, attribute: .height, relatedBy: .equal, toItem: bigRectangleView2, attribute: .height, multiplier: 1.0, constant: 0.0)

        NSLayoutConstraint.activate([heightConstraint1, heightConstraint2])
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么以编程方式使用“自动布局”约束进行居中不起作用?

来自分类Dev

使用自动布局以编程方式将子视图添加到UICollectionView中不起作用

来自分类Dev

以编程方式添加的约束不起作用

来自分类Dev

自动布局以编程方式不起作用

来自分类Dev

自动布局以编程方式不起作用

来自分类Dev

以编程方式创建horizontalscrollview不起作用

来自分类Dev

XCode:堆栈视图和约束

来自分类Dev

Swift以编程方式添加的约束不起作用

来自分类Dev

Swift自动布局:子视图中的约束不起作用

来自分类Dev

以编程方式将视图添加到层次结构后,使用 ScrollView 滚动不起作用

来自分类Dev

如何以编程方式创建布局约束

来自分类Dev

以编程方式创建的UIControl中的AutoLayout似乎不起作用

来自分类Dev

以编程方式快速定位和约束

来自分类Dev

使用自动布局以编程方式创建视图层次结构

来自分类Dev

相对布局在 Android Studio 中不起作用始终在设计视图中显示约束布局

来自分类Dev

以编程方式添加的约束反向起作用

来自分类Dev

CircleCI Android约束布局不起作用

来自分类Dev

使用自动布局以编程方式添加视图会产生“ NSGenericException”,原因:“无法在视图上安装约束

来自分类Dev

Swift编程约束不起作用

来自分类Dev

使用布局渲染gsp /视图不起作用

来自分类Dev

如何以编程方式在约束布局中移动视图(按钮)?

来自分类Dev

以编程方式在一组视图上设置布局约束

来自分类Dev

约束布局不起作用;跨设备的布局被破坏

来自分类Dev

以编程方式设置样式不起作用?

来自分类Dev

以编程方式分配imageurl不起作用

来自分类Dev

以编程方式设置LayoutParams不起作用

来自分类Dev

iOS UICollection视图布局不起作用

来自分类Dev

以编程方式添加视图后,Android layout_centerInParent属性不起作用

来自分类Dev

推动新的视图控制器(以编程方式)不起作用?为什么?

Related 相关文章

  1. 1

    为什么以编程方式使用“自动布局”约束进行居中不起作用?

  2. 2

    使用自动布局以编程方式将子视图添加到UICollectionView中不起作用

  3. 3

    以编程方式添加的约束不起作用

  4. 4

    自动布局以编程方式不起作用

  5. 5

    自动布局以编程方式不起作用

  6. 6

    以编程方式创建horizontalscrollview不起作用

  7. 7

    XCode:堆栈视图和约束

  8. 8

    Swift以编程方式添加的约束不起作用

  9. 9

    Swift自动布局:子视图中的约束不起作用

  10. 10

    以编程方式将视图添加到层次结构后,使用 ScrollView 滚动不起作用

  11. 11

    如何以编程方式创建布局约束

  12. 12

    以编程方式创建的UIControl中的AutoLayout似乎不起作用

  13. 13

    以编程方式快速定位和约束

  14. 14

    使用自动布局以编程方式创建视图层次结构

  15. 15

    相对布局在 Android Studio 中不起作用始终在设计视图中显示约束布局

  16. 16

    以编程方式添加的约束反向起作用

  17. 17

    CircleCI Android约束布局不起作用

  18. 18

    使用自动布局以编程方式添加视图会产生“ NSGenericException”,原因:“无法在视图上安装约束

  19. 19

    Swift编程约束不起作用

  20. 20

    使用布局渲染gsp /视图不起作用

  21. 21

    如何以编程方式在约束布局中移动视图(按钮)?

  22. 22

    以编程方式在一组视图上设置布局约束

  23. 23

    约束布局不起作用;跨设备的布局被破坏

  24. 24

    以编程方式设置样式不起作用?

  25. 25

    以编程方式分配imageurl不起作用

  26. 26

    以编程方式设置LayoutParams不起作用

  27. 27

    iOS UICollection视图布局不起作用

  28. 28

    以编程方式添加视图后,Android layout_centerInParent属性不起作用

  29. 29

    推动新的视图控制器(以编程方式)不起作用?为什么?

热门标签

归档