簡體   English   中英

使用swift在UiStackview中設置UiLabel的高度

[英]Setting height of UiLabel inside UiStackview Using swift

我在UiStackview中動態添加視圖。 由於UiStackview不是常規視圖,因此我無法為其添加底部邊框。 這就是為什么我計划在其末尾添加一個UILabel的原因

我將在UIStackview的末尾添加的標簽將作為邊框處理。 我當時正在考慮使其高度為1點。 並為其賦予背景色。 並將其高度擴展到屏幕的整個寬度。

但是它的高度並沒有得到控制。 誰能告訴我問題出在哪里?

這是小代碼片段

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 10, height: 1))
            label.backgroundColor = UIColor.black
            label.text = ""


            bottomBorder.addArrangedSubview(label)

我將其添加到主stackview的末尾。 它被添加到主stackview中,但高度為30點。 或者可能是UiLabel的默認高度

我的問題是:

  1. 如何在堆棧視圖的末尾添加UiLabel或邊框(垂直對齊)
  2. 有什么辦法可以直接在我的stackview中添加邊框? 四個側面邊框還是至少底部邊框?

您有2種替代方法可以實現此目的:

1-將stackview放在UIView parentView

在此處輸入圖片說明

2 -不添加UILabel直接向UIStackView ,添加UILabelUIView那么添加UIViewUIStackView ,這樣你就可以想的任何分離UIView

代碼來做到這一點:

override func viewDidLoad()
    {
        super.viewDidLoad()
        stackView.distribution = .fillEqually

        let v1 = getViewForStackView(lblText: "lbl1")
        let v2 = getViewForStackView(lblText: "lbl2")

        stackView.addArrangedSubview(v1)
        stackView.addArrangedSubview(v2)
    }


    func getViewForStackView(lblText:String)->UIView
    {
        let rectView = CGRect(x: 0, y: 0, width: 100, height: 100)
        let view = UIView(frame: rectView)
        view.backgroundColor = .green
        let label = UILabel()
        label.text = lblText
        label.backgroundColor = .red
        addFillingSubview(parentView: view, subview: label, insets: UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8))
        return view
    }

    func addFillingSubview(parentView:UIView, subview: UIView, insets: UIEdgeInsets = .zero)
    {
        subview.translatesAutoresizingMaskIntoConstraints = false
        parentView.addSubview(subview)

        let views = ["subview": subview]
        let metrics = ["top": insets.top, "left": insets.left, "bottom": insets.bottom, "right": insets.right]

        parentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|-(left)-[subview]-(right)-|", options: [], metrics: metrics, views: views))
        parentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-(top)-[subview]-(bottom)-|", options: [], metrics: metrics, views: views))
    }

輸出:

在此處輸入圖片說明

使用這個課程

class BorderedStackView: UIStackView {
    let borderWidth : Int = 2
    let borderColor : UIColor = UIColor.darkGray;
    var borderView : UIView!


    required init(coder: NSCoder) {
        super.init(coder: coder);
        initializeSubviews();
    }

    required override init(frame: CGRect) {
        super.init(frame: frame);
        initializeSubviews();
    }

    func initializeSubviews() {
        borderView = UIView.init();
        borderView.backgroundColor = UIColor.black;
        self.addSubview(borderView);
    }

    override func layoutSubviews() {
        super.layoutSubviews();

        var frame = self.bounds;
        frame.origin.y = frame.size.height - CGFloat.init(borderWidth)
        frame.size.height = CGFloat.init(borderWidth);
        self.borderView.frame = frame;
        self.bringSubview(toFront: self.borderView)
    }
}

用途:

    let stackView = BorderedStackView.init(frame: CGRect.init(x: 50, y: 50, width: 200, height: 200));
    stackView.axis = .vertical
    stackView.borderWidth = 20;
    stackView.borderColor = .red;
    self.view.addSubview(stackView);

    let subView1 = UIView.init(frame: CGRect.init(x: 0, y: 0, width: 200, height: 100));
    subView1.backgroundColor = UIColor.red;
    stackView.addSubview(subView1);

    let subView2 = UIView.init(frame: CGRect.init(x: 0, y: 100, width: 200, height: 100));
    subView2.backgroundColor = UIColor.black;
    stackView.addSubview(subView2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM