将NSGridView高度设置为其内容视图的高度

时间:2017-10-25 11:24:53

标签: swift cocoa autolayout

我定义了这样的网格视图:

let lb01 = NSTextField(labelWithString: "01")
....
let gridView = NSGridView(views:
  [ [empty, lb01],
    [empty, lb02],
    [lb03, lb04]
  ])

gridView.translatesAutoresizingMaskIntoConstraints = false  
self.addSubview(gridView)

let layoutViewMap = ["another View": anotherView, "GridView": gridView]
var constraintList = [NSLayoutConstraint]()
let constraintV = NSLayoutConstraint.constraints( withVisualFormat: "V:[GridView]-50-[anotherView]", options: [], metrics: nil, views: layoutViewMap)
constraintList += constraintV
let constraintH = NSLayoutConstraint.constraints( withVisualFormat: "|-20-[GridView(==300)]", options: [], metrics: nil, views: layoutViewMap)
constraintList += constraintH

NSLayoutConstraint.activate(constraintList)


在某些情况下,网格视图的高度增长

我可以用

定义一个显式高度
let constraintV = NSLayoutConstraint.constraints( withVisualFormat: "V:[GridView(==70)]-50-[anotherView]", options: [], metrics: nil, views: layoutViewMap)

我如何存档,高度未明确给出,但计算高度等与其内容

1 个答案:

答案 0 :(得分:2)

听起来你想要的是你的NSGridView拥抱它包含的内容。为此,您只需要在视图上提升contentHuggingPriority

gridView.setContentHuggingPriority(600, for: .horizontal)
gridView.setContentHuggingPriority(600, for: .vertical)

600有些随意(默认为249,刚好低于.defaultLow),但它来自WWDC 2016 Auto Layout talk