在界面构建器中,按住Command+ =将调整按钮的大小以适合其文本.我想知道在按钮添加到视图之前是否可以以编程方式执行此操作.
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button.titleLabel setFont:[UIFont fontWithName:@"Arial-BoldMT" size:12]];
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
// I need to know the width needed to accomodate NSStringVariable
[button setTitle:NSStringVariable forState:UIControlStateNormal];
// So that I can set the width property of the button before addSubview
[button setFrame:CGRectMake(10, 0, width, fixedHeight)];
[subNavigation addSubview:button];
Run Code Online (Sandbox Code Playgroud)
Dan*_*Ray 128
在UIKit中,NSString类中还有一些内容可以从给定的NSString对象中获取它在以某种字体呈现时所占用的大小.
文档在这里.
简而言之,如果你去:
CGSize stringsize = [myString sizeWithFont:[UIFont systemFontOfSize:14]];
//or whatever font you're using
[button setFrame:CGRectMake(10,0,stringsize.width, stringsize.height)];
Run Code Online (Sandbox Code Playgroud)
...您将按钮的框架设置为您正在渲染的字符串的高度和宽度.
您可能想要在CGSize周围尝试一些缓冲区空间,但您将在正确的位置开始.
Dan*_*ood 99
在代码中执行此操作的方法是:
[button sizeToFit];
Run Code Online (Sandbox Code Playgroud)
如果您是子类并希望添加额外规则,则可以覆盖:
- (CGSize)sizeThatFits:(CGSize)size;
Run Code Online (Sandbox Code Playgroud)
gup*_*ron 31
如果您的按钮是使用Interface Builder制作的,并且您要在代码中更改标题,则可以执行以下操作:
[self.button setTitle:@"Button Title" forState:UIControlStateNormal];
[self.button sizeToFit];
Run Code Online (Sandbox Code Playgroud)
Jua*_*ero 22
迅速:
这里最重要的是,当你将调用.sizeToFit(),它应该是设置要显示的文本,以便它可以读取所需的大小,如果您稍后更新文本,然后再调用它之后.
var button = UIButton()
button.setTitle("Length of this text determines size", forState: UIControlState.Normal)
button.sizeToFit()
self.view.addSubview(button)
Run Code Online (Sandbox Code Playgroud)
Tad*_*Tad 16
要使用autolayout完成此操作,请尝试设置可变宽度约束:
您可能还需要调整Content Hugging Priority并Content Compression Resistance Priority获得所需的结果.
UILabel 完全自动调整大小:
这个UILabel只是设置在屏幕中心(仅限两个约束,水平/垂直):
它会自动更改宽度:
您不需要设置任何宽度或高度 - 它是完全自动的.
注意,简单地附上小黄色方块("间距"为零).当UILabel调整大小时,它们会自动移动.
添加"> ="约束可设置UILabel的最小宽度:
Log*_*gan 14
如果要调整文本大小而不是按钮,可以使用...
button.titleLabel.adjustsFontSizeToFitWidth = YES;
button.titleLabel.minimumScaleFactor = .5;
// The .5 value means that I will let it go down to half the original font size
// before the texts gets truncated
// note, if using anything pre ios6, you would use I think
button.titleLabel.minimumFontSize = 8;
Run Code Online (Sandbox Code Playgroud)
斯威夫特 4.2
感谢上帝,这解决了。为按钮设置文本后,您可以从 UIView(官方文档在此处)中检索自然大小的内在内容大小。对于 UIButton,您可以像下面那样使用它。
button.intrinsicContentSize.width
Run Code Online (Sandbox Code Playgroud)
为了您的信息,我调整了宽度以使其看起来正确。
button.frame = CGRect(fx: xOffset, y: 0.0, width: button.intrinsicContentSize.width + 18, height: 40)
Run Code Online (Sandbox Code Playgroud)
模拟器
来源:https : //riptutorial.com/ios/example/16418/get-uibutton-s-size-strictly-based-on-its-text-and-font
sizeToFit无法正常工作.代替:
myButton.size = myButton.sizeThatFits(CGSize.zero)
Run Code Online (Sandbox Code Playgroud)
你也可以添加contentInset到按钮:
myButton.contentEdgeInsets = UIEdgeInsetsMake(8, 8, 4, 8)
只是:
UIView为包含自动布局的包装器以查看周围的视图.UILabel那个包装器里面.添加将tyour标签粘贴到包装器边缘的约束.UIButton你的包装器,然后简单地添加你所做的相同的约束UILabel.cod*_*urn -3
在Xcode 4.5及更高版本中,现在可以使用" 自动布局/约束 "来完成.
主要优点是:
一些缺点:
最酷的是我们专注于声明一个意图,例如:
这是一个简单的教程,介绍自动布局.
有关详细信息.
一开始需要一些时间,但看起来确实值得付出努力.
| 归档时间: |
|
| 查看次数: |
133572 次 |
| 最近记录: |