将UILabel添加到子视图会使视图消失

时间:2017-10-08 01:44:36

标签: ios swift uiview uiscrollview uilabel

我正在尝试创建以下视图heirarchy

Base UIView-> UIScrollView -> UIView -> UILabel

在故事板中,我创建了view-> UIScrollView,并使Scrollview和基本视图具有相同的大小并对齐它们的起源。

然后我添加了后续的UIView - >代码中的UILabels。

在ViewController viewDidLoad()函数中,我添加了UIView和UILabel,并在UIScrollView上设置了约束。

我无法添加UILabel。如果我只是将UIView添加到scrollView它的工作正常(我给它们不同的颜色只是为了看到)。

只要我将UILabel添加到视图中,我就会看到以下问题 -

  • UIView似乎正在消失,标签正在添加到基本视图中。

  • UILabel总是被添加到屏幕的上角。无论我做什么都不改变。

我感觉这两个问题是相互关联的,我没有正确地在标签上添加约束。

如果有人可以在我的代码中指出错误,那将会很棒。

override func viewDidLoad() 
{
    super.viewDidLoad()

    view.backgroundColor = UIColor.orange

    let boxViewOrigin = CGPoint(x:0, y:0)
    let boxViewSize = CGSize(width: view.bounds.width * 3, height: view.bounds.height * 3)
    let boxView = UIView(frame: CGRect(origin: boxViewOrigin, size: boxViewSize))
    boxView.backgroundColor = UIColor.blue
    boxView.translatesAutoresizingMaskIntoConstraints = false

    let scrollView = view.subviews[0] as! UIScrollView

    scrollView.addSubview(boxView)

    // Add contraints
    scrollView.contentSize = boxViewSize //CGSize(width: view.bounds.width * 3, height: view.bounds.height * 3)
    scrollView.contentOffset = CGPoint(x: (view.bounds.origin.x + view.bounds.width) , y: (view.bounds.origin.y + view.bounds.height) )

    /// ---- Commenting out everything from here to the end of the function makes the UIView appear properly. ------
    let nameLabel = UILabel()
    nameLabel.translatesAutoresizingMaskIntoConstraints = false
    nameLabel.backgroundColor = UIColor.yellow
    let nameLabelOrigin = CGPoint(x: boxView.bounds.midX, y: boxView.bounds.midY )
    nameLabel.frame = CGRect(origin: nameLabelOrigin, size: CGSize(width: 30, height: 30) )
    nameLabel.text = "BB"
    //nameLabel.isEnabled = false

    nameLabel.isUserInteractionEnabled = false

    let verticalConstraint:NSLayoutConstraint = NSLayoutConstraint(item: nameLabel, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: boxView, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0)

    let horizontalConstraint:NSLayoutConstraint = NSLayoutConstraint(item: nameLabel, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: boxView, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0)

     boxView.addSubview(nameLabel)
     view.addConstraints([verticalConstraint, horizontalConstraint])
}

0 个答案:

没有答案