UILabel - テキストに合わせてラベルのサイズを自動調整しますか? 質問する

UILabel - テキストに合わせてラベルのサイズを自動調整しますか? 質問する

UILabel ボックス/境界を、含まれるテキストに合わせて自動的にサイズ変更することは可能ですか? (ディスプレイよりも大きくなってもかまいません)

では、ユーザーが「こんにちは」または「名前がとても長いので、このボックスに収めたい」と入力した場合、切り捨てられることはなく、それに応じてラベルが「拡張」されるのでしょうか?

ベストアンサー1

UILabel非常に似たようなカテゴリを作成した私の gist を確認してください。私のカテゴリでは、UILabelすべてのコンテンツを表示するために高さが伸びます。出典: github.com

または、この投稿をご覧ください: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;
}

おすすめ記事