35

UIStackViews私はViewController国境で5つに分けようとしています。私は彼らのそれぞれに を与えIBOutlet、それから彼らに電話してその財産viewDidLoadを使用させましたが、役に立ちませんでした。layerプログラムでスタックビューの境界線を与えることはできませんか?

コード:

@IBOutlet weak var stackView1: UIStackView!
@IBOutlet weak var stackView2: UIStackView!
@IBOutlet weak var stackView3: UIStackView!
@IBOutlet weak var stackView4: UIStackView!
@IBOutlet weak var stackView5: UIStackView!

override func viewDidLoad() {
    super.viewDidLoad()

    stackView1.layer.borderWidth = 5
    stackView2.layer.borderWidth = 5
    stackView3.layer.borderWidth = 5
    stackView4.layer.borderWidth = 5
    stackView5.layer.borderWidth = 5   
}
4

9 に答える 9

43

残念ながら、これはできません。UIStackView は、(自動レイアウト制約を使用して) レイアウトを実行するが、それ自体は表示しない「非レンダリング」ビューであるという点で珍しいものです。すべての UIView のようなレイヤーがありますが、無視されます。

「スタック ビューの外観の管理」の下にある Apple ドキュメントを参照してください。

UIStackView は、UIView の非レンダリング サブクラスです。独自のユーザー インターフェイスは提供しません。代わりに、配置されたビューの位置とサイズを管理するだけです。その結果、一部のプロパティ (backgroundColor など) はスタック ビューに影響しません。同様に、layerClass、drawRect:、または drawLayer:inContext: をオーバーライドすることはできません。

于 2015-12-10T21:32:17.593 に答える
13

UIView 内に stackView を埋め込み、そのビューの境界線 (色、幅など) を設定してから、stackView を上、左、右、高さなどの UIView に制約することができます。

于 2016-06-30T14:27:43.210 に答える
1

UIStackView 内に複数の UIStackView があります。

スタック内のUIStackViewの1つだけに上下の境界線が必要だったので、問題のUIStackViewをUIViewに追加し、背景色を必要な上下の境界線の色に設定し、境界線のあるUIStackViewを置き換えましたUIViewで配置されたサブビュー。

import UIKit
import Foundation

let goldBorderedUIView = UIView()

lazy var mainStackView: UIStackView =
    {
        let mainStack = UIStackView(arrangedSubviews: [goldBorderedUIView, stack2, stack3, stack 4])

        mainStack.translatesAutoresizingMaskIntoConstraints = false
        mainStack.axis = .vertical
        mainStack.spacing = 0.5
        mainStack.distribution = .fillEqually
        return mainStack
    }()


     func setupBorderdStack() { 

     NSLayoutConstraint.activate([
        borderedStackView.leadingAnchor.constraint(equalTo: goldBorderedUIView.leadingAnchor),
        borderedStackView.topAnchor.constraint(equalTo: goldBorderedUIView.topAnchor, constant: 5),
        borderedStackView.trailingAnchor.constraint(equalTo: goldBorderedUIView.trailingAnchor),
        borderedStackView.bottomAnchor.constraint(equalTo: goldBorderedUIView.bottomAnchor, constant: -5)
     ])
    }

     override func viewDidLoad() {
     super.viewDidLoad()

     setupBorderdStack()
    }
于 2020-06-15T05:40:08.143 に答える