1

我想要一个带有图像标题的 UIButton。我得到了使用出现的文本-setTitleEdgeInsets

但我不想通过反复试验来获得正确的位置,因为按钮的标题应该是动态的。我尝试确定 UIButtons titleLabel 对象的大小和位置,并使用以下代码设置与其对应的 titleEdgeInsets:

[myButton setTitleEdgeInsets:UIEdgeInsetsMake(myButton.center.y - (myButton.titleLabel.bounds.size.height / 2),
                             - (myButton.center.x - (myButton.titleLabel.bounds.size.width / 2)),
                             myButton.center.y + (myButton.titleLabel.bounds.size.height / 2),
                             myButton.center.x + (myButton.titleLabel.bounds.size.width / 2))];

我在这里遗漏或误用了什么吗?

在此先感谢,致以诚挚的问候-朱利安

4

1 回答 1

1

按钮在管理标签和图像子视图方面可能会有点麻烦——它不会给你太多控制权。这是因为它们会在按钮状态更改(甚至更频繁)时更新这些值,因此如果您手动设置了参数,您的设置就会丢失。这就是为什么你需要使用这样的方法setTitleEdgeInsets:- 你在正确的轨道上。:)

需要注意的事项:

  • 您的使用myButton.center可能不正确。那将是您的按钮在其父视图中的中心,您可能希望在此处使用按钮大小的一半。
  • 可能的情况是,当您的代码被调用时,按钮尚未完成其子视图布局,因此尚未为titleLabel.

您可以调用layoutSubviews按钮和/或sizeToFit标签。但是,您确实受制于 的不透明实现细节UIButton,因此最好计算您认为的文本/标签大小(使用 中的一种sizeWithFont:*方法NSString)并将顶部和左侧边缘插入设置为定位文本。

于 2012-06-17T21:11:03.997 回答