如何使用 IB 显示精确大小的按钮?

Posted

技术标签:

【中文标题】如何使用 IB 显示精确大小的按钮?【英文标题】:How do you display an exact size button using IB? 【发布时间】:2012-07-19 15:33:54 【问题描述】:

我在 Photoshop 中创建了一个按钮,该按钮的大小已经与用于显示的大小完全一致。

在 IB 中,我创建了一个 RRB 并将背景图像设置为按钮 .png。但是,这不能正确显示 - 在我的 .png 按钮和 IB 提供的按钮之间有一个白边,尤其是在必须具有不同半径的角落处。我已经尝试过使用 IB 中的所有各种设置,但无法让它消失。

但是,如果我没有将 .png 设置为背景图像,而是将其设置为图像,那么它看起来很完美(图像和背景图像之间有什么区别?)。 但是,当 .png 设置为图像而不是背景时,我根本无法显示按钮文本,尽管当 .png 设置为背景图像时它会出现。我再次尝试在 IB 中设置所有各种设置,但无法显示文本。

我做错了什么,我应该怎么做才能让它工作?

我知道我可以通过编程方式创建按钮和文本,但我想了解为什么我可以使用 IB 让它工作。

编辑: 我已将类型更改为自定义,但仍无法正确显示。查看我发布的图片,没有文字的图片是它应该如何显示以及如果我将 .png 设置为图像而不是背景的外观。第二个是如果我将背景图像设置为 .png 并将按钮类型设置为自定义时的样子。第三个是背景图片设置为.png,类型为圆角矩形。

【问题讨论】:

【参考方案1】:

使用按钮类型 = UIButtonTypeCustom

【讨论】:

【参考方案2】:

您的按钮背景图片看起来与您的UIButton 尺寸不同。

ios 支持所谓的“可拉伸图像”,允许您定义应该拉伸图像的哪一部分。不幸的是,这不能在 Interface Builder 中完成。在代码中,你可以这样做:

-(void)viewDidLoad

    [super viewDidLoad];
    UIImage *stretchableImage = [[someButton backgroundImageForState:UIControlStateNormal] stretchableImageWithLeftCapWidth:5 topCapHeight:5];
    [someButton setBackgroundImage:stretchableImage forState:UIControlStateNormal];

重要提示stretchableImageWithLeftCapWidth:topCapHeight: 在 iOS 5 中已弃用,但如果您还需要支持 iOS 4,这是唯一的解决方案。如果您只能使用 iOS 5,请使用 resizableImageWithCapInsets:

【讨论】:

在 IB 中我确实将按钮的尺寸设置为 .png 大小,但似乎我必须放弃 IB 并在代码中执行(我需要支持 4、5和 6)。 如果 .png 的尺寸确实与 UIButton 的尺寸相同,那么角落应该看起来正确 - 除非您的图片实际上看起来像这样......【参考方案3】:

不使用圆角矩形按钮类型,而是将按钮类型设置为 UIButtonTypeCustom。 这将按照您的意愿进行,因为它会将按钮包裹在您提供的图像周围。

【讨论】:

谢谢,我试过了,但显示不一样。我在帖子中添加了一些图片,上一张是我将 .png 设置为图像时的显示方式,下一张是我将其设置为类型设置为自定义的背景图像时的显示方式。 第一张图片的按钮类型是否也设置为自定义? 第一个是.png设置为图片而不是背景图片,不管类型是自定义还是圆角矩形,看起来都是这样。 将 .png 设置为按钮的图像属性有什么问题?你的文字会是静态的吗?如果是这样,您可以通过 PS 将文本添加到图像中。 文本可能会改变,而且它会使本地化更加麻烦,因为我必须要求设计师为每种语言创建按钮。

以上是关于如何使用 IB 显示精确大小的按钮?的主要内容,如果未能解决你的问题,请参考以下文章

uibutton与图像

如果我的子视图的大小与其父视图相同,如何使用 ctrl-drag 在 IB 中设置约束?

如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar?

如何在 iOS7 中使用自动布局让按钮垂直增长?

如何正确自动缩放 UIButton 和标题文本?

如何使控件占据堆栈内的实际大小