标题和图像居中的UIButton

时间:2012-06-17 20:30:40

标签: uiimageview uibutton uilabel title

我想要一个带有图像标题的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))];

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

提前致谢,亲切的问候 - 朱利安

1 个答案:

答案 0 :(得分:1)

按钮在管理标签和图像子视图方面可能会有点痛苦 - 它并没有给你太多控制权。这是因为只要按钮状态发生变化(甚至更频繁),它们就会更新这些值,因此如果您手动设置参数,则设置会丢失。这就是您需要使用setTitleEdgeInsets:等方法的原因 - 您正走在正确的轨道上。 :)

需要注意的事项:

  • 您对myButton.center的使用可能不正确。这将是您父视图中按钮的中心,您可能希望在这里使用按钮大小的一半。
  • 可能是这样的情况:当您的代码被调用时,按钮尚未完成其子视图布局,因此尚未设置titleLabel的框架/边界。

您可以拨打按钮上的layoutSubviews和/或标签上的sizeToFit。但是,您真的受UIButton的不透明实现细节的支配,因此最好计算您认为文本/标签大小的内容(使用sizeWithFont:*方法之一NSString)并设置顶部和左侧边缘插入以定位文本。