2

有很多链接如何调整标签的大小,但是缺乏如何根据标签大小调整 UIButton 大小的信息。目前,我设置了自动布局的屏幕视图(所有系统约束都是从 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];

问题是按钮的框架高度保持 20 像素,但标签字符串显示在三行上,因此与另一个按钮标题重叠。如果我添加 [myButton sizeToFit] 则按钮宽度会调整大小以将所有文本放入一行,因此标题超出屏幕。

如果我添加 [myButton sizeThatFits:CGSizeMake(320, 100)] 那么调整大小根本不起作用。我知道 sizeToFit 根本不应该被调用,因为它不是自动布局的一部分,但是需要关于如何轻松地将按钮使其标签适合屏幕 320 宽度的建议。

我觉得我需要从代码中添加系统约束,但之前没有这样做过,所以不确定它应该是什么样子。我可能需要从代码中添加大量约束才能使这个简单的事情正常工作:)

4

2 回答 2

0

对于这种自定义,您需要创建 UIButton 的子类。在子类中,您可以添加有利于您需求的自定义标签。您还可以覆盖 setTitle:forState 方法以自动更新您的自定义标签。

于 2013-11-13T14:10:07.437 回答
0

而不是使用Autolayout,您可以只使用一个集合视图,它可以更好地选择布局按钮等元素。

它也能够更好地处理旋转下的布局。

或者您可以使用此代码,它对我有用...

例如,在这里替换您想要的填充值:

UIButton* myButton = [[UIButton alloc] init];

// setup some autolayout constraints here
myButton.titleEdgeInsets = UIEdgeInsetsMake(-desiredBottomPadding,
                                            -desiredRightPadding,
                                            -desiredTopPadding,
                                            -desiredLeftPadding);

结合正确的自动布局约束,您最终会得到一个包含图像和文本的自动调整大小按钮!

于 2013-11-13T14:03:22.900 回答