【问题标题】:In iOS, can we set a UIButton's font and title and get its width?在 iOS 中,我们可以设置 UIButton 的字体和标题并获取它的宽度吗?
【发布时间】:2012-07-19 15:10:18
【问题描述】:

在iOS中,我们可以设置一个UIButton并获取它的宽度,还是必须设置它的宽度然后设置它的内容?

看来我们可以

[someString sizeWithFont:someFont].width

获取宽度,然后将其设置为按钮的宽度(通过设置其框架),然后设置该标题和字体。但是我们可以只设置按钮的字体和标题(并自动调整按钮大小),然后获取宽度吗?

【问题讨论】:

  • 你建议的方式有什么问题?
  • 例如,一个按钮可能有额外的填充或边框......所以能够获得按钮的整体宽度会很好
  • 可以从button.titleLabel.frame和button.frame的区别中得到padding和border,然后用button.transform = CGAffineTransformMakeScale(newWidth,1)调整大小。像这样调整大小会扭曲图形中的任何特征。

标签: ios uibutton


【解决方案1】:

使用UIView的sizeToFit方法(http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW11)

[button setTitle:@"Hello World" forState:UIControlStateNormal];
[button sizeToFit];
float width = button.frame.size.width;

【讨论】:

  • 似乎效果不错...设置内容,然后将sizeToFit发送到按钮,然后我们可以使用aButton.center = ...将按钮居中并访问其frame.size.width
  • @Nosrettap,sizeToFit 对我不起作用。宽度没有改变,但文本被设置为更大。
【解决方案2】:

sizeToFit 会起作用,但它不会给您太大的灵活性,因为它将宽度和高度都包裹在文本周围。一个更好的方法是找出你可以用这个做的大小......

(iOS 8 及更高版本)

CGSize buttonSize = [button.titleLabel sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:NSFontAttributeName ,[UIFont fontWithName:@"HelveticaNeue-Bold" size:9.0], nil]].width;

(iOS 7 及更低版本)

CGSize buttonSize = [button.titleLabel sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:9.0]].width;

然后您可以通过使用 buttonSize

调整框架来添加边距等
[button setFrame:CGRectMake(0, 0, buttonSize.width + 20, buttonSize.height)];

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 2023-04-04
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多