ios - 如何使用自动布局从代码中创建和添加带有多行标签的 UIButton?

标签 ios objective-c uibutton autolayout

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

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

最佳答案

而不是使用 自动布局 ,您可以只使用 收藏 View 哪些更好的选择可以让您布置按钮等元素。

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

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

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

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

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

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

关于ios - 如何使用自动布局从代码中创建和添加带有多行标签的 UIButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19955532/

相关文章:

objective-c - Xcode : How do I remove an action from a object?

ios - 为什么我的 UIColor 无法正确创建?

ios - 由于在应用程序的其他位置使用了UIMenuController,因此UISearchBar显示错误的UIMenuItems

ios - 为什么 CGContextSetStrokeColorWithColor 不将文本颜色设置为黑色?

iphone - 如何通过 SOAP 向 Web 服务发送参数?

ios - 单击 TableView 中的按钮时从其他 View Controller 重新加载 UITableView

ios - 如何查询核心数据中按唯一值分组的值?

ios - Xcode 错误连接到字段

objective-c - 创建后 NSManagedObject 保留计数为 2

ios - 如何将字符串数据发送到 UIButton 标签?