如何根據文字調整標籤寬度?如果文本長度很小,我希望標籤寬度很小...如果文本長度很小,我希望標籤寬度根據文本長度。可能嗎?iPhone - 根據文字調整UILabel寬度
其實我有兩個UI標籤。我需要把這兩個放在附近。但如果第一個標籤的文字太小,則會有很大的差距。我想消除這個差距。
如何根據文字調整標籤寬度?如果文本長度很小,我希望標籤寬度很小...如果文本長度很小,我希望標籤寬度根據文本長度。可能嗎?iPhone - 根據文字調整UILabel寬度
其實我有兩個UI標籤。我需要把這兩個放在附近。但如果第一個標籤的文字太小,則會有很大的差距。我想消除這個差距。
//use this for custom font
CGFloat width = [label.text sizeWithFont:[UIFont fontWithName:@"ChaparralPro-Bold" size:40 ]].width;
//use this for system font
CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:40 ]].width;
label.frame = CGRectMake(point.x, point.y, width,height);
//point.x, point.y -> origin for label;
//height -> your label height;
嘗試這些選項,
UIFont *myFont = [UIFont boldSystemFontOfSize:15.0];
// Get the width of a string ...
CGSize size = [@"Some string here" sizeWithFont:myFont];
// Get the width of a string when wrapping within a particular width
NSString *mystring = @"some strings some string some strings...";
CGSize size = [mystring sizeWithFont:myFont
forWidth:150.0
lineBreakMode:UILineBreakModeWordWrap];
您還可以嘗試[label sizeToFit];
使用這種方法,可以設置兩個標籤的幀,
[firstLabel sizeToFit];
[secondLabel sizeToFit];
secondLabel.frame = CGRectMake(CGRectGetMaxX(firstLabel.frame), secondLabel.origin.y, secondLabel.frame.size.width, secondLabel.frame.size.height);
sizeWithFont constrainedToSize:lineBreakMode:
是用原來的方法。下面是如何使用它的一個示例如下:
//Calculate the expected size based on the font and linebreak mode of your label
CGSize maximumLabelSize = CGSizeMake(296,9999);
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];
//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
嘗試以下操作:
/* Consider these two labels as the labels that you use,
and that these labels have been initialized */
UILabel* firstLabel;
UILabel* secondLabel;
CGSize labelSize = [firstLabel.text sizeWithFont:[UIFont systemFontOfSize:12]];
//change the font size, or font as per your requirements
CGRect firstLabelRect = firstLabel.frame;
firstLabelRect.size.width = labelSize.width;
//You will get the width as per the text in label
firstLabel.frame = firstLabelRect;
/* Now, let's change the frame for the second label */
CGRect secondLabelRect;
CGFloat x = firstLabelRect.origin.x;
CGFloat y = firstLabelRect.origin.y;
x = x + labelSize.width + 20; //There are some changes here.
secondLabelRect = secondLabel.frame;
secondLabelRect.origin.x = x;
secondLabelRect.origin.y = y;
secondLabel.frame = secondLabelRect;
功能sizeWithFont:
中的iOS 7.0棄用,因此,你必須使用sizeWithAttributes:
適用於iOS 7.0 +。另外要詢問服務舊版本,下面這段代碼可用於:
CGFloat width;
if ([[UIDevice currentDevice].systemVersion floatValue] < 7.0)
{
width = [text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:16.0 ]].width;
}
else
{
width = ceil([text sizeWithAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:16.0]}].width);
}
上的sizeWithAttributes:
結果使用功能ceil()
是由蘋果的文檔建議:
「這個方法返回小數的大小;使用返回的大小來您必須使用ceil函數將其值提高到最接近的較大整數。「
這是做舊點的方法是什麼?爲什麼不總是使用sizeWithAttributes? – clocksmith
只使用,如果您使用您的視圖或廈門國際銀行或細胞
[LBl sizeToFit];
約束到,如果它不是那麼工作
dispatch_async(dispatch_get_main_queue(), ^{
[LBl sizeToFit];
});
更新主線程上的UI是關鍵。即使我們沒有使用Blocks,也必須確保所有更新都在主線程中進行。 –
// In swift 2.0
let lblDescription = UILabel(frame: CGRectMake(0, 0, 200, 20))
lblDescription.numberOfLines = 0
lblDescription.text = "Sample text to show its whatever may be"
lblDescription.sizeToFit()
// Its automatically Adjust the height
儘管此代碼片段可能會解決此問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – SmokeDispenser
@Vinayak mahadev提供了關於代碼片段 – user23790
的一些解釋嗨SmokeDispenser,只是給lblDescription.sizeToFit() 自動它將擴大UILabel高度。我們不需要計算任何東西。 – Vinayak
檢查我的回答第二部分。 – iDev
嘗試歸屬文本文本。 – Vinayak