uikit——Auto Layout——NSLayoutAnchor
阿新 • • 發佈:2019-02-09
NSLayoutAnchor
anchor,即錨,是對UI物件attribute(NSLayoutAttribute)的封裝,因此用anchor生成constraint,本質等同用NSLayoutConstraint生成constraint anchor以factory設計模式實現,NSLayoutAnchor為虛父類 NSLayoutAnchor concrete subclass包括:- NSLayoutXAxisAnchor:x-axis attribute
- NSLayoutYAxisAnchor:y-axis attribute
- NSLayoutDimension:size attribute
- 程式碼更加簡潔,簡明,易讀
- NSLayoutAnchor concrete subclass增加型別檢查,防止生成invalid constraint
- NSLayoutXAxisAnchor:生成horizontal constraint
- NSLayoutYAxisAnchor:生成vertical constraint
- NSLayoutDimension:生成size constraint
NSLayoutAnchor生成以下relationship constraint:/* These methods return an inactive constraint of the form thisAnchor = otherAnchor. */ - (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor; - (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor; - (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor; /* These methods return an inactive constraint of the form thisAnchor = otherAnchor + constant. */ - (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor constant:(CGFloat)c; - (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor constant:(CGFloat)c; - (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutAnchor<AnchorType> *)anchor constant:(CGFloat)c;
- anchor1 = anchor2
- anchor1 >= anchor2
- anchor1 <= anchor2
- anchor1 = anchor2 + c
- anchor1 >= anchor2 + c
- anchor1 <= anchor2 + c
NSLayoutXAxisAnchor
NSLayoutXAxisAnchor是NSLayoutAnchor concrete subclass,對NSLayoutAnchor介面進行了具體實現,增加了型別檢查功能,傳入引數必須是NSLayoutXAxisAnchor型別,無新增介面NSLayoutYAxisAnchor
NSLayoutYAxisAnchor是NSLayoutAnchor的concrete subclass,對NSLayoutAnchor介面進行了具體實現,增加了型別檢查功能,傳入引數必須是NSLayoutYAxisAnchor型別,無新增介面NSLayoutDimension
NSLayoutDimension是NSLayoutAnchor的concrete subclass,對NSLayoutAnchor介面進行了具體實現,增加了型別檢查功能,傳入引數必須是NSLayoutDimension型別,並新增了介面 NSLayoutDimension新增介面:/* These methods return an inactive constraint of the form
thisVariable = constant.
*/
- (NSLayoutConstraint *)constraintEqualToConstant:(CGFloat)c;
- (NSLayoutConstraint *)constraintGreaterThanOrEqualToConstant:(CGFloat)c;
- (NSLayoutConstraint *)constraintLessThanOrEqualToConstant:(CGFloat)c;
/* These methods return an inactive constraint of the form
thisAnchor = otherAnchor * multiplier.
*/
- (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m;
- (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m;
- (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m;
/* These methods return an inactive constraint of the form
thisAnchor = otherAnchor * multiplier + constant.
*/
- (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m constant:(CGFloat)c;
- (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m constant:(CGFloat)c;
- (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m constant:(CGFloat)c;
NSLayoutDimension新增介面生成以下relationship constraint:
- anchor1 = c
- anchor1 >= c
- anchor1 <= c
- anchor1 = m * anchor2
- anchor1 >= m * anchor2
- anchor1 <= m * anchor2
- anchor1 = m * anchor2 + c
- anchor1 >= m * anchor2 + c
- anchor1 <= m * anchor2 + c