【问题标题】:Setting height of UiLabel inside UiStackview Using swift使用swift在UiStackview中设置UiLabel的高度
【发布时间】:2018-07-03 07:57:13
【问题描述】:

我在 UiStackview 中动态添加视图。由于 UiStackview 不是常规视图,因此我无法为其添加底部边框。这就是为什么我计划在它的末尾添加一个 UILabel

我将在 UIStackview 末尾添加的标签将被视为边框。我正在考虑将其高度设为 1 点。并给它一个背景颜色。并将其高度扩展到屏幕的整个宽度。

但它的高度没有得到控制。谁能告诉我是什么问题?

这里是小代码sn-p

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


            bottomBorder.addArrangedSubview(label)

我在主堆栈视图的末尾添加了这个。它被添加到主堆栈视图中,但我认为高度为 30 点。或者可能是 UiLabel 的默认高度

我的问题是:

  1. 如何在stackview末尾添加UiLabel或边框(垂直对齐)
  2. 有什么方法可以直接给我的stackview添加边框吗?四边边框或至少底部边框?

【问题讨论】:

    标签: ios swift xcode


    【解决方案1】:

    您有 2 种选择来实现这一目标:

    1- 将 stackview 放入 UIView parentView

    2- 不要将UILabel 直接添加到UIStackView,将UILabel 添加到UIView 然后将UIView 添加到UIStackView,这样您就可以将任何您想要的分隔符添加到@ 987654332@.

    执行此操作的代码:

    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))
        }
    

    输出:

    【讨论】:

    • 我添加了一个 UiView 并在其中添加了一个 UiLabel,那么分发属性将如何在 uilabel 上工作? bcz 我想修复 uilabel 的高度
    • 分布与UIStackview相关,可以从右侧面板(右边第三个tab)中选择分布为fillEqually,例如这样所有子视图将平均分布。跨度>
    • 我正在动态添加stackview和所有视图
    • 我有 mainstackview,通过 IB 添加,现在在具有垂直对齐的 mainstack 视图中,我正在添加不同的视图,所以我想在它们之间放置分隔符,所以我需要一个有一些的视图背景,但必须有 1 点高度。现在你有我的问题吗?
    • 你能告诉我如何设置视图的高度吗,是Uiview还是UiLabel
    【解决方案2】:

    使用这个类

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多