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;
}