表示するテキストに基づいてテキスト領域のサイズを自動変更する必要があるアプリケーションで作業しています。
第一に、UILabel
(私の場合は静的テキストを表示するのに論理的に最良の選択です)またはUITextView
のどちらを使用すべきかわかりません。
使用方法
テキストでラベルまたはテキストビューを初期化するだけです。代わりに、最初にフレームを定義してから、その領域のテキストを制限します。
適切なソリューションを提案できる場合、それは大きな助けになります。
私はドキュメントや他の参考文献を調べましたが、ここで私を助けたり見落としたりすることのできるものはあまり見つけませんでした。
sizeToFit
メソッドは非常にうまく機能しました。
私は次のことをしました。
UILabel *testLabel =[[UILabel alloc] initWithFrame:CGRectMake(6,3, 262,20 )]; // RectMake(xPos,yPos,Max Width I want, is just a container value);
NSString * test=@"this is test this is test inthis is test ininthis is test inthis is test inthis is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...this is test in uilabel ...";
testLabel.text = test;
testLabel.numberOfLines = 0; //will wrap text in new line
[testLabel sizeToFit];
[self.view addSubview:testLabel];
あなたはテキストサイズを見つけることができます:
CGSize textSize = [[myObject getALongText]
sizeWithFont:[UIFont boldSystemFontOfSize:15]
constrainedToSize:CGSizeMake(maxWidth, 2000)
lineBreakMode:UILineBreakModeWordWrap];
UILabel
を次のように作成できます:
UILabel * lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,0,textSize.width, textSize.height];
[lbl setNumberOfLines:0];
[lbl setLineBreakMode:UILineBreakModeWordWrap];
[lbl setText:[myObject getALongText]];
Swiftの場合:
testLabel = UILabel(frame: CGRectMake(6, 3, 262, 20))
testLabel.text = test
testLabel.numberOfLines = 0
testLabel.sizeToFit()
Objective Cで
UILabel *testLabel = [[UILabel alloc] initWithFrame: CGRectMake(6, 3, 262, 20)]];
testLabel.text = test;
testLabel.numberOfLines = 0;
[testLabel sizeToFit];
UILabelの高さのみをサイズ変更する場合は、これを使用します。
@property (nonatomic, weak) IBOutlet UILabel *titleLabel;
CGRect titleLabelBounds = self.titleLabel.bounds;
titleLabelBounds.size.height = CGFLOAT_MAX;
// Change limitedToNumberOfLines to your preferred limit (0 for no limit)
CGRect minimumTextRect = [self.titleLabel textRectForBounds:titleLabelBounds limitedToNumberOfLines:2];
CGFloat titleLabelHeightDelta = minimumTextRect.size.height - self.titleLabel.frame.size.height;
CGRect titleFrame = self.titleLabel.frame;
titleFrame.size.height += titleLabelHeightDelta;
self.titleLabel.frame = titleFrame;
これで、titleLabelHeightDelta
を使用して、ラベルサイズに応じて他のビューをレイアウトできます(自動レイアウトを使用しなくても)。
質問を完全に理解しているかどうかはわかりませんが、sizeToFit
でUILabel
メソッドを使用して(メソッドはUIView
から継承されます)、ラベルのテキスト。
を見つけるための最も簡単な方法。テキストに応じた行数。次のコードを使用できます。
ceil(([aText sizeWithFont:aFont].width)/self.bounds.size.width-300);
フロート値を返します。
[lbl setNumberOfLines:floatvalue];
アプリでこのソリューションを何度も使用するため、以下を実行します。
1)extensions
というディレクトリを作成し、_UILabel.Swift
_という新しいファイルを次のコードで追加します。
_import UIKit
extension UILabel {
func resizeToText() {
self.numberOfLines = 0
self.sizeToFit()
}
}
_
2)アプリコードで、必要なラベル幅を定義し、resizeToText()
を呼び出すだけです。
_label.frame.size.width = labelWidth
label.resizeToText()
_
これにより、幅が維持され、高さが自動的に増加します。
Autolayout呼び出しでは、sizeToFitはサイズを変更しないことに注意してください。サイズは後でautolayout計算によって変更されるためです。この場合、「height> = xx」値を使用してUILabelに適切な高さ制約を設定する必要があります。
この関数を使用して、文字列の長さに基づいてラベルのサイズを変更できます
func ChangeSizeOfLabel(text:String) -> CGSize{
let font = UIFont(name: "HelveticaNeue", size: 12)!
let textAttributes = [NSFontAttributeName: font]
let size = text.boundingRectWithSize(CGSizeMake(310, 999), options: .UsesLineFragmentOrigin, attributes: textAttributes, context: nil)
let adjustSize = CGSizeMake(size.width, size.height)
return adjustSize
}
次のように使用します:
させる
showLabel.frame = CGRectMake(x, y, width , self.ChangeSizeOfLabel("Hello , Height is changing dynamically.....").height)
以下のコードを試してください、それは複数行で動作します
self.labelText.text = string;
self.labelText.lineBreakMode = NSLineBreakByWordWrapping;
self.labelText.numberOfLines = 0;