你如何以编程方式制作UIViews,它们是textLabels的高度? (在斯威夫特)

时间:2016-07-24 11:26:17

标签: ios swift uiview uitextview subview

我试图制作UIViews,每个UIViews包含不同的文本语句(在UITextViews中)。可以有不同数量的视图,每个语句的长度可以不同。我使用

制作这些视图
let newView = DragView(heightOfView: ???, viewNumber: i, heightFromTop: currentHeightForThings)

在DragView类中,我然后使用viewNumber访问该语句,并将该语句放在我已经制作的nib文件的文本标签中。

我的问题是我没有任何东西放在heightOfView中。我想要的高度是textLabel的高度,它取决于该语句的textView中有多少行。但是我无法访问此高度,因为textLabel尚未构建。

在此先感谢,我是新手,但我想快速学习,所以如果我错过了一些明显的东西我会道歉!

下面是我在DragView类中的代码

class DragView: UIView {

    @IBOutlet var dragView: UIView!
    @IBOutlet weak var statementLabel: UITextView!

    var dropTarget: UIView?
    var viewNumber: Int!

    init(heightOfView: Int, viewNumber:Int, heightFromTop: Int) {
        self.viewNumber = viewNumber
        let startingPosition = CGRect(x: Int(widthCentre) - dragViewWidth / 2, y: heightFromTop, width: dragViewWidth, height: heightOfView)
        super.init(frame: startingPosition)

        NSBundle.mainBundle().loadNibNamed("DragView", owner: self, options:  nil)

        self.addSubview(self.dragView)
        let movingView = MovingView(frame: startingPosition)
        self.addSubview(movingView)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

这里的movingView是我在视图上添加的子视图,用于移动视图。

1 个答案:

答案 0 :(得分:0)

您可以覆盖DragView的{​​{1}}方法,让它根据sizeThatFits的高度返回高度。您必须先在statementLabel上调用sizeToFit,然后设置该视图的高度,然后根据该高度返回一个高度。

textView

此外,如果您要进行编程布局,我建议您查看override func sizeThatFits(size: CGSize) -> CGSize { self.statementLabel.sizeToFit() return CGSize( width: self.frame.width, height: self.statementLabel.frame.height) } sizeThatFits。子视图的大小和位置应该在layoutSubviews而不是layoutSubviews中进行。