UILabel text not automatically resized using Auto Layout
I’m trying to implement a constrained
UITableViewCell subclass and everything is working perfectly, except for the
UILabel. The constraints that I’ve set up are definitely being enforced, but the text inside of the label does not resize to a smaller font size when the constraints clash. Instead, the height of the UILabel gets truncated and the font remains the same size, meaning the letters get cut off at the top and bottom.
Is there some method I have to call in order to get this to work? I would think Auto Layout would be smart enough to automatically resize the font size, so I’m kind of lost as to why this is happening.
self.label = [[UILabel alloc] initWithFrame:CGRectZero]; self.label.textColor = [UIColor whiteColor]; self.label.translatesAutoresizingMaskIntoConstraints = NO; self.label.textAlignment = NSTextAlignmentCenter; self.label.numberOfLines = 1; [self.contentView addSubview:self.label]; NSLayoutConstraint *otherViewToLabelHorizontalConstraint = // Make sure that the label is always to the right of the other view. [NSLayoutConstraint constraintWithItem:self.label attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self.otherView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0]; NSLayoutConstraint *aTextFieldToLabelVerticalConstraint = [NSLayoutConstraint constraintWithItem:self.label attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self.aTextField attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0];
Basically, these constraints are meant to enforce a cell where
otherView is on the left,
aTextField is on the right of
otherView at the same y-level, and the label is below
aTextField and to the right of the bottom of
As usual, thanks for any help with this.
3 Solutions Collect From Internet About “UILabel text not automatically resized using Auto Layout”
myLabel.adjustsFontSizeToFitWidth = YES; myLabel.minimumScaleFactor = .5f;
Then the label font size will be auto adjusted.
Along with the setting of
adjustsFontSizeToFitWidth and the
minimumScaleFactor, you also need to set the content compression of the label to have a low priority. Check out the “Compression Resistance and Content Hugging” section of this objc.io essay. Basically, if your label has a lower compression resistance priority than the trailing constraint, the label should get resized:
[myLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
I solved this problem by setting a required width constraint to the view I was linking the label to.
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0f constant:width];
And make sure the priority for this constraint is set to UILayoutPriorityRequired.
Text was resizing when pinning the label to the superview but not to the textfield, so I deduced there must be a problem with intrinsic sizes of elements involved in the layout calculation for the label’s final width.
- Why does iPhone sample code use so many intermediate variables?
- Automatically generate the Swift interface for a compiled module
- Objective-C/Xcode 6: Best way to have a Search Bar populate a table view?
- Swift _ABSearchComparison is not convertible to ABSearchComparison
- how to use DES algorithm to encrypt or decrypt some data in object-c？
- How to add QLPreviewController as Subview in objective C
- How to distribute Swift Library without exposing the source code?
- Xcode reference a framework instead of link binary with libraries
- What's happen if control UI by performSelectorInBackground?
- Is there a trick to save time building in Xcode when there are thousands of images?
- SWRevealViewController pushing FrontVC is not causing animation and not responding to notifications
- Avoiding compiler warnings when doing message forwarding
- Loop through all object properties at runtime
- Is there anything like a generic list in Cocoa / Objective-C?
- iOS 9 How to Detect Silent Mode?