โปรดตรวจสอบส่วนสำคัญของฉันที่ฉันได้ทำหมวดหมู่สำหรับUILabel
สิ่งที่คล้ายกันมากหมวดหมู่ของฉันช่วยUILabel
ยืดความสูงให้แสดงเนื้อหาทั้งหมด: https://gist.github.com/1005520
หรือตรวจสอบโพสต์นี้: https://stackoverflow.com/a/7242981/662605
สิ่งนี้จะยืดความสูง แต่คุณสามารถเปลี่ยนได้อย่างง่ายดายเพื่อทำงานในแบบอื่นและยืดความกว้างด้วยสิ่งนี้ซึ่งฉันเชื่อว่าสิ่งที่คุณต้องการจะทำ:
@implementation UILabel (dynamicSizeMeWidth)
- (void)resizeToStretch{
float width = [self expectedWidth];
CGRect newFrame = [self frame];
newFrame.size.width = width;
[self setFrame:newFrame];
}
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize maximumLabelSize = CGSizeMake(CGRectGetWidth(self.bounds), CGFLOAT_MAX);
CGSize expectedLabelSize = [[self text] sizeWithFont:[self font]
constrainedToSize:maximumLabelSize
lineBreakMode:[self lineBreakMode]];
return expectedLabelSize.width;
}
@end
คุณสามารถใช้sizeToFit
วิธีที่มีอยู่ในUIView
คลาสได้ง่ายขึ้น แต่ตั้งค่าจำนวนบรรทัดเป็น 1 เพื่อความปลอดภัย
อัปเดต iOS 6
หากคุณใช้ AutoLayout แสดงว่าคุณมีโซลูชันในตัว โดยการตั้งค่าจำนวนบรรทัดเป็น 0 กรอบงานจะปรับขนาดป้ายกำกับของคุณอย่างเหมาะสม (เพิ่มความสูงมากขึ้น) เพื่อให้พอดีกับข้อความของคุณ
อัปเดต iOS 8
sizeWithFont:
เลิกใช้แล้วให้ใช้sizeWithAttributes:
แทน:
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}