有很多关于如何调整标签大小的链接,但是缺少如何根据标签大小调整UIButton大小的信息。目前,我的屏幕视图设置为autolayout(所有系统约束都是从IB添加的),一切正常,但需要在屏幕底部添加动态内容。我需要创建和添加随机数量的按钮随机长度标题。所以,这是用于创建和添加按钮的代码片段:
// Loop
UIButton *myButton = [UIButton new];
UIButton.frame = CGRectMake(0, previousButtonOriginY, self.view.bounds.size.width, 20);
myButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
myButton.titleLabel.textAlignment = NSTextAlignmentLeft;
myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[myButton setTitle:@"very long title..." forState:UIControlStateNormal];
myButton.titleLabel.numberOfLines = 0;
[self.footerView addSubview:myButton];
问题是按钮的框架高度保持20px但标签字符串显示在三行上,因此与另一个按钮标题重叠。如果我添加[myButton sizeToFit],则调整按钮宽度以使所有文本适合一行,因此标题超出了屏幕。
如果我添加[myButton sizeThatFits:CGSizeMake(320,100)],则调整大小根本不起作用。我知道sizeToFit根本不应该被调用,因为它不是自动布局的一部分,但需要建议如何使按钮适合其标签到屏幕320宽度。
我觉得我需要从代码中添加系统约束,但之前没有这样做过,所以不确定它应该是什么样子。我可能需要从代码中添加大量约束才能使这个简单的工作起作用:)
答案 0 :(得分:0)
您可以使用集合视图,而不是使用集合视图,这样您可以选择更好的选项来布置按钮等元素。
它也能够更好地处理旋转下的布局。
或者您可以使用此代码,它对我有用......
例如,在此处替换所需的填充值:
UIButton * myButton = [[UIButton alloc] init];
// setup some autolayout constraints here
myButton.titleEdgeInsets = UIEdgeInsetsMake(-desiredBottomPadding,
-desiredRightPadding,
-desiredTopPadding,
-desiredLeftPadding);
结合正确的自动布局限制,您最终会得到一个包含图像和文字的自动调整大小按钮!
答案 1 :(得分:0)
对于这种自定义,您需要创建UIButton的子类。在子类中,您可以添加自定义标签,以满足您的需求。您还可以覆盖setTitle:forState方法以自动更新自定义标签。