簡體   English   中英

如何以編程方式將UIButton調整為文本大小並保持良好的填充?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM