Mac应用之Autosizing
一:保持左右间距不变,宽随窗口变化而变化(保持顶部间距不变)
注意:想要保持左右间距不变,那宽一定要可变,除了要勾选左右两个选项,中间表示宽可变的也得勾选。倘若中间不勾选,这时候宽不可变,其实际效果相当于只勾选了左边间距不变,右边勾选相当于无效选项。
当我们左右两边只勾选一个的时候,就表示左右单边间距不变;如果两边都勾选了,其效果就得看中间是否勾选了——中间勾选了表示左右间距都不变,只有宽变化;中间无勾选的话,相当于右边是个无效勾选,左边间距不变,宽也不变。
上图设置等同编码:
setAutoresizingMask:NSViewWidthSizable|NSViewMinYMargin
注意:我们很容易在编码上以为要做到左右间距不变,宽随窗口变化而变化时写成NSViewWidthSizable|NSViewMaxXMargin|NSViewMinXMargin,如果写成这样,就表示左右间距和宽都随着窗口等比例变化了。
二:左右间距和宽随着窗口等比例变化(保持顶部间距不变)
上图设置等同编码:
setAutoresizingMask:NSViewWidthSizable|NSViewMinYMargin|NSViewMaxXMargin|NSViewMinXMargin
根据上面两个用例,得出结论:
编码的时候,单独使用下面标记,
NSViewMinYMargin——对应顶部间距不变
NSViewMaxYMargin——对应底部间距不变
NSViewMinXMargin——对应右边间距不变
NSViewMaxXMargin——对应左边间距不变
在编码的时候MinX与MaxX若要同时使用,那一定是要加上NSViewWidthSizable,否则是无意义的。我们很容易以为想要左右两边不变,mask用NSViewMinXMargin|NSViewMaxXMargin,既然没有配合NSViewWidthSizable,它无意义。那配上上之后(NSViewMinXMargin|NSViewMaxXMargin|NSViewWidthSizable),却又不是我们想要的左右间距不变,只有宽变,而是宽与间距都等比变。
三:右边间距不变,左边间距与宽按比例变化
上图设置等同编码:
setAutoresizingMask:NSViewMaxYMargin|NSViewMinXMargin|NSViewWidthSizable
再得结论:
左右两边一边间距不变,宽与另一边间距按比例变化与编码看起来比较匹配,也不会有什么误会。只是我们很容易搞错,以为NSViewMinXMargin是对应左边间距,其实是对应右边间距不变。storyboard上边缘(上下左右),勾选表示不变,不勾选表示变化,而宽高却相反,勾选表示变化,不勾选表示不变。左右只有一边勾选,中间可选可不选。当左右都勾选的时候,中间的宽一定要勾选,否则无意义。
对于上下变化与间距,其逻辑与左右变化类似,不详述了。