转自    http://blog.sina.com.cn/s/blog_9564cb6e0101wv9o.html

controller和View的责任分配:

1、View指定固有的content size

leaf-level views,比如buttons相比分配位置的代码,它自己更应该知道它自己size是多大。intrinsicContentSize,告诉layout system在一个视图内有一些内容它并不了解;这个方法在子类中被重写,被layout system调用。一个View可返回它的宽高或者NSViewNoInstrinsicMetric

2、Controller 指定intrinsic多重要

尽管一个View指定了它的固定content size,这个View的使用者会说intrinsic多重要.setContentHuggingPriority:forOrientation:   setContentCompressionResystancePriority:forOrientation:

3、如果实现了一个自定义View:1)updateConstraints  2)layout

setTranslatesAutoresizingMaskIntoConstraints: view的autoresing Mask是否需要被翻译成constriants.因为通常情况下view的autoresing mask产生的constraints完全指定了view的位置,如果想要constraints更加灵活,必须忽略autoresingMask,既NO。IB创建的视图已经设置为NO。

Visual Format Language

1、standard space: [button]-[textField]

2、width constraint :[button(>=50)]

3、Connection to superView : |-50-[orchbox]-50-|

4、Vertical Layout: V:[topField]-10-[bottomField]

5、Flush Views:[maroonView][oceanView]

6、Priority:[button(100@20)]

7、Equal Width:  [button1(==button2)]

8、Multple predicates: [flexibleButton(>=70,<=90)]

NSLayoutFormatOptions

NSLayoutFormatAlignAllLeft  = NSLayoutAttributeLeft  对象的标准矩形区域左侧

NSLayoutFormatAlignAllRight = NSLayoutAttributeRight 对象的标准矩形区域右侧

NSLayoutFormatAlignAllTop = NSLayoutAttributeTop  对象的标准矩形区域上侧

NSLayoutFormatAlignAllBottom = NSLayoutAttributeBottom  对象的标准矩形区域下侧

NSLayoutFormatAlignAllLeading = NSLayoutAttributeLeading  对象的标准矩形区域前沿

NSLayoutFormatAlignAllTrailing = NSLayoutAttributeTrailing 对象的标准矩形区域末尾

NSLayoutFormatAlignAllCenterX = NSLayoutAttributeCenterX 对象的标准矩形区域x轴中点

NSLayoutFormatAlignAllCenterY = NSLayoutAttributeCenterY 对象的标准矩形区域y轴中点

NSLayoutFormatAlignAllBaseLine = NSLayoutAttributeBaseLine  对象的baseline

setContentHuggingPriority:forOrientation:   在指定方向上,view反对超过它的固定大小,NSLayoutPriorityDefaultLow,NSLayoutPriorityDefaultHight

setContentCompressionResistancePrioriry:Orientation:  在指定方向上,view小于它的固定大小的抵抗优先级

NSLayoutPriority :

NSLayoutPriorityRequired  1000   ;

NSLayoutPriorityDefaultHigh  750  button不压缩它的内容;

NSLayoutPriorityDragThatCanResizeWindow 510;

NSLayoutPriotiryWindowSizeStayPut 500  窗口大小保持不变,实际上你希望比它大或小;

NSLayoutPriorityDragCannotResizeWindow  490  splite view拆分,拖动不改变窗口大小;

NSLayoutPriorityDefaultLow 250 一个button水平包含它的内容;

NSLayoutPriorityFittingSizeCompression 50;

requiresConstraintBasedLayout   自定义view应该重写这个方法返回YES,如果它不能使用autoresing正确的布局

04-19 19:33