[英]How to programmatically resize an UIButton to the text size and keep a nice padding?
我有一個動態創建的按鈕,需要調整大小。 它有足夠的空間來增長,但是調用sizeToFit接縫什么也不做,或者至少沒有充分放大按鈕。
如何獲得理想的效果?
-sizeWithFont:
出NSString
方法-sizeWithFont:
它返回一個CGSize
,它將通知您按鈕中文本需要多少大小。 然后,您可以基於此大小調整按鈕的框架,在按鈕的框架的寬度和高度上添加所需的填充。 像這樣的東西:
NSString *msg = @"The button label";
UIFont *font = [UIFont systemFontOfSize:17];
CGSize msgSize = [msg sizeWithFont:font];
CGRect frame = button.frame;
frame.size.width = msg.size.width+10;
frame.size.height = msg.size.height+10;
button.frame = frame;
(從內存寫入;未編譯。:-)
當然,您還必須設置按鈕標題和字體。
在iOS 7中,sizeWithFont:已貶值。 現在,您應該使用sizeWithAttribute:。
但這不是我要解決的問題。 有兩種解決方法:
1)要使用[button sizeToFit],請確保已禁用“自動布局”。 否則,您將無法以編程方式調整按鈕的大小。 您必須調整約束的大小。
2)但是,此答案在使用上非常有限。 在我要向您展示的示例中,按鈕將不顯示在屏幕上,因為文本全部在一行上。 要在限制寬度的同時更改按鈕的高度,請使用以下代碼。 再次確保自動版式已關閉,否則將無法使用。
UIFont *font = [UIFont fontWithName:@"Helvetica-Bold" size:14.0];
NSString *text = @"This is a very long new title for the button to be sure, now I'm going to add even more";
[self.testButton setTitle:text forState:UIControlStateNormal];
self.testButton.titleLabel.font = font;
CGFloat width = self.testButton.frame.size.width - 10; //button width - padding width
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font}];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX}
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
CGSize size = rect.size;
size.height = ceilf(size.height);
size.width = ceilf(size.width);
self.testButton.frame = CGRectMake(self.testButton.frame.origin.x, self.testButton.frame.origin.y, self.testButton.frame.size.width, size.height + 15);
因為boundingRectWithSize將為您傳遞一個具有非整數大小的矩形,所以您必須使用ceilf進行四舍五入。
我將寬度減去10,然后再將其傳遞給boundingRectWithSize為按鈕創建填充。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.