Swift 4,UIStackViews 不显示

标签 swift

我遇到的奇怪错误..

这段代码:

    // Label 1
    let textLabel1 = UILabel()
    textLabel1.backgroundColor = UIColor.yellow
    textLabel1.text  = "Label1"
    textLabel1.textAlignment = .center

    // Label 2
    let textLabel2 = UILabel()
    textLabel2.backgroundColor = UIColor.blue
    textLabel2.text  = "Label2"
    textLabel2.textAlignment = .center

    // Label 3
    let textLabel3 = UILabel()
    textLabel3.backgroundColor = UIColor.green
    textLabel3.text  = "Label3"
    textLabel3.textAlignment = .center


    let h1StackView = UIStackView()
    h1StackView.axis = UILayoutConstraintAxis.horizontal
    h1StackView.distribution = .fillEqually
    h1StackView.alignment = UIStackViewAlignment.fill
    h1StackView.spacing = 0
    h1StackView.addArrangedSubview(textLabel3)
    h1StackView.addArrangedSubview(textLabel2)
    self.view.addSubview(h1StackView)

    let h2StackView = UIStackView()
    h2StackView.axis = UILayoutConstraintAxis.horizontal
    h2StackView.distribution = .fillEqually
    h2StackView.alignment = UIStackViewAlignment.fill
    h2StackView.spacing = 0
    h2StackView.addArrangedSubview(textLabel3)
    h2StackView.addArrangedSubview(textLabel1)
    self.view.addSubview(h2StackView)


    //Stack View
    let stackView = UIStackView(frame: CGRect(x: 0, y: pos.VERT_STACK_Y, width: pos.SCREEN_WIDTH, height: pos.VERT_STACK_HEIGHT))
    stackView.axis = UILayoutConstraintAxis.vertical
    stackView.distribution = .fillEqually
    stackView.alignment = UIStackViewAlignment.fill
    stackView.spacing = 0
    stackView.addArrangedSubview(h1StackView)
    stackView.addArrangedSubview(h2StackView)
    self.view.addSubview(stackView)

给出这个 View : Buggy Image 1 Buggy Image 1

这接近正确,但错误,因为我不希望看到那个大的蓝色条,而是一半蓝色 - 一半绿色。

虽然对我来说有点奇怪......

如果我只更改代码中的一个字符(textLabel2 到 textLabel1):

(这个):

    let h1StackView = UIStackView()
    h1StackView.axis = UILayoutConstraintAxis.horizontal
    h1StackView.distribution = .fillEqually
    h1StackView.alignment = UIStackViewAlignment.fill
    h1StackView.spacing = 0
    h1StackView.addArrangedSubview(textLabel3)
    h1StackView.addArrangedSubview(textLabel2)
    self.view.addSubview(h1StackView)

(对此):

    let h1StackView = UIStackView()
    h1StackView.axis = UILayoutConstraintAxis.horizontal
    h1StackView.distribution = .fillEqually
    h1StackView.alignment = UIStackViewAlignment.fill
    h1StackView.spacing = 0
    h1StackView.addArrangedSubview(textLabel3)
    h1StackView.addArrangedSubview(textLabel1)
    self.view.addSubview(h1StackView)

然后我得到这个 View :

Buggy Image 2 Buggy Image 2

似乎有两个问题,我也不能完全解决..有什么想法吗?我希望这是我的问题,而不是 Swift/Xcode 的问题。

(附:抱歉没有足够的代表嵌入图片)

最佳答案

主要问题在于 一次只能在一个 View 内 的逻辑,所以首先当您重复将 lbl3 添加到两个水平 stackViews 时,它出现在最后一个(stack2),当你重复添加 1,3 时,它们只显示在水平堆栈 2 中,所以要重复你必须创建另一个对象,如果你决定创建一个主堆栈来保存 2 个水平堆栈,那么评论这些 2线条

self.view.addSubview(h1StackView)
self.view.addSubview(h2StackView)

关于Swift 4,UIStackViews 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51995418/

相关文章:

ios - 在静态函数中使用计算值

ios - 我是 Storyboard中的 5 个 Controller ,如何以编程方式返回官方初始 Controller ?

ios - 确保 ScrollView 和 View 始终具有相同的高度

Swift - 2 tableviews 和 detailviewcontroller

ios - UICollectionView 的单元格选择在 swift 中不起作用

SWIFT:控制另一个用户设备上的 View

ios - 生成声音(不是来自文件)

ios - 点击搜索栏时,栏按钮项目将被关闭

ios - 如何在 spritekit 中使用 swift 转换场景

swift - 解码 Firebase base64 Swift 2.0