Contenu connexe Similaire à Auto-Layout in iOS 7 (13) Plus de Mindfire Solutions (20) Auto-Layout in iOS 73. Auto Layout
Using Auto Layout, you can create a
dynamic and versatile interface that
responds appropriately to changes in
screen size, device orientation, and
localization.
4. Basic Concept
Expression of the form y = m*x + b,
where:
y and x are attributes of views.
m and b are floating point values.
An attribute is one of left, right, top,
bottom, leading, trailing, width, height,
centerX, centerY, and baseline.
6. Constraints Attribute
view1.attribute1 RELATION multiplier * view2.attribute2 +
constant
NSLayoutAttributeLeft
NSLayoutAttributeRight
NSLayoutAttributeTop
NSLayoutAttributeBottom
NSLayoutAttributeLeading
NSLayoutAttributeTrailing
NSLayoutAttributeWidth
NSLayoutAttributeHeight
NSLayoutAttributeCenterX
NSLayoutAttributeCenterY
NSLayoutAttributeBaseline
NSLayoutRelationEqual
NSLayoutRelationGreaterThanOrEqual
NSLayoutRelationLessThanOrEqual
NSLayoutAttributeNotAnAttribute
8. Constraints Code
view1.attribute1 RELATION multiplier * view2.attribute2 +
constant
constraint = [NSLayoutConstraint
constraintWithItem: view
attribute: NSLayoutAttributeWidth
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 1.0
constant:100.0];
[view addConstraint: constraint];
constraint = [NSLayoutConstraint
constraintWithItem: view
attribute: NSLayoutAttributeWidth
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 1.0
Constant: 80.0];
[view addConstraint: constraint];
9. Check For Ambiguous Layout
view.hasAmbiguousLayout
view.exerciseAmbiguityInLayout
for (UIView *view in self.subviews) {
if ([view hasAmbiguousLayout]){
NSLog(@"<%@:0x%0x>", view.description, (int)self);
}
}
10. Intrinsic ContentSize
Suggested size for the view.
- (CGSize) intrinsicContentSize {
return mySize;
}
[self invalidateIntrinsicContentSize];
UIImage *img = UIImage imageNamed:@"Icon.png"];
UIImageView *iv = [[UIImageView alloc] initWithImage:img];
NSLog(@"%@", NSStringFromCGSize(iv.intrinsicContentSize));
12. UIView
Opting in to Constraint-Based Layout
+ requiresConstraintBasedLayout
– translatesAutoresizingMaskIntoConstraints
– setTranslatesAutoresizingMaskIntoConstraints:
Managing Constraints
–
–
–
–
–
constraints
addConstraint:
addConstraints:
removeConstraint:
removeConstraints:
Measuring in Constraint-Based Layout
–
–
–
–
–
–
–
systemLayoutSizeFittingSize
intrinsicContentSize
invalidateIntrinsicContentSize
contentCompressionResistancePriorityForAxis:
setContentCompressionResistancePriority:forAxis:
contentHuggingPriorityForAxis:
setContentHuggingPriority:forAxis:
13. UIView
Aligning Views with Constraint-Based Layout
–
–
–
–
alignmentRectForFrame:
frameForAlignmentRect:
alignmentRectInsets
viewForBaselineLayout
Triggering Constraint-Based Layout
–
–
–
–
needsUpdateConstraints
setNeedsUpdateConstraints
updateConstraints
updateConstraintsIfNeeded
Debugging Constraint-Based Layout
– constraintsAffectingLayoutForAxis:
– hasAmbiguousLayout
– exerciseAmbiguityInLayout