12

このsizeWithFont:constrainedToSize:lineBreakMode:メソッドが iOS7 で非推奨になった場合UILabel、テキストに合わせて高さと幅を動的に調整するには、どうすれば a のサイズを自動的に変更できますか?

4

2 に答える 2

6

これは iOS6 と iOS7 で動作するはずですが、ラベルの制約が壊れます (必要に応じてプログラムですべて元に戻す必要があります)。

-(void)resizeHeightForLabel: (UILabel*)label {
    label.numberOfLines = 0;
    UIView *superview = label.superview;
    [label removeFromSuperview];
    [label removeConstraints:label.constraints];
    CGRect labelFrame = label.frame;
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        CGRect expectedFrame = [label.text boundingRectWithSize:CGSizeMake(label.frame.size.width, 9999)
                                                        options:NSStringDrawingUsesLineFragmentOrigin
                                                     attributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                                 label.font, NSFontAttributeName,
                                                                 nil]
                                                        context:nil];
        labelFrame.size = expectedFrame.size;
        labelFrame.size.height = ceil(labelFrame.size.height); //iOS7 is not rounding up to the nearest whole number
    } else {
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
        labelFrame.size = [label.text sizeWithFont:label.font
                                 constrainedToSize:CGSizeMake(label.frame.size.width, 9999)
                                     lineBreakMode:label.lineBreakMode];
#pragma GCC diagnostic warning "-Wdeprecated-declarations"
    }
    label.frame = labelFrame;
    [superview addSubview:label];
}

このメソッドを viewController に追加して、次のように使用します。

[self resizeHeightForLabel:myLabel];
//set new constraints here if needed
于 2013-09-21T14:50:11.960 に答える