代码之家  ›  专栏  ›  技术社区  ›  mica

为什么Autolayout不更改视图框架

  •  0
  • mica  · 技术社区  · 7 年前

    我在其superview的func中创建了一个视图

    let black = NSView(frame: NSRect(x: 0, y: 0, width: 10, height: 10))
    
    black.translatesAutoresizingMaskIntoConstraints = false
    black.wantsLayer = true
    black.layer?.backgroundColor = NSColor.black.cgColor
    self.addSubview(black)
    
    black.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -15).isActive = true
    black.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 15).isActive = true
    black.heightAnchor.constraint(equalToConstant: 115).isActive = true
    black.widthAnchor.constraint(equalToConstant: 115).isActive = true
    
    print ("origin (\(black.frame.origin.x),\(black.frame.origin.y)) size (\(black.frame.size.width),\(black.frame.size.height)) ")
    

    输出为 origin(0,0) , size(10,10) ,这些是创建视图时使用的值。 屏幕上的黑色视图按预期定位 origin:(15,15) size:(115,115) .

    为什么框架没有更新?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Francesco Deliro    7 年前

    设置约束后,您可以更新视图的框架,为Cocoa调用相同的LayoutIfNeed函数:

    black.layoutSubtreeIfNeeded()