Autoshrink on a UILabel with multiple lines

前端 未结 17 2031
醉梦人生
醉梦人生 2020-11-28 21:31

Is it possible to use the autoshrink property in conjunction on multiple lines on a UILabel? for example, the large text size possible on 2 available lines.

17条回答
  •  隐瞒了意图╮
    2020-11-28 21:55

    Here's the category solution updated to iOS 7 based off of itecedor's updates for iOS 6.

    Header file:

    #import 
    @interface UILabel (MultiLineAutoSize)
        - (void)adjustFontSizeToFit;
    @end
    

    And the implementation file:

    @implementation UILabel (MultiLineAutoSize)
    
    
    - (void)adjustFontSizeToFit {
        UIFont *font = self.font;
        CGSize size = self.frame.size;
    
        for (CGFloat maxSize = self.font.pointSize; maxSize >= self.minimumScaleFactor * self.font.pointSize; maxSize -= 1.f)
        {
            font = [font fontWithSize:maxSize];
            CGSize constraintSize = CGSizeMake(size.width, MAXFLOAT);
    
            CGRect textRect = [self.text boundingRectWithSize:constraintSize
                                                 options:NSStringDrawingUsesLineFragmentOrigin
                                              attributes:@{NSFontAttributeName:font}
                                                 context:nil];
    
            CGSize labelSize = textRect.size;
    
    
            if(labelSize.height <= size.height)
            {
                self.font = font;
                [self setNeedsLayout];
                break;
            }
        }
        // set the font to the minimum size anyway
        self.font = font;
        [self setNeedsLayout]; }
    
    
    @end
    

提交回复
热议问题