自定义uibutton,想改变title跟image的位置,图片在右边,文字在左边?

发布于 2022-09-01 17:58:15 字数 136 浏览 25 评论 0

我调用layoutsubviews,也重写了setimage跟setitle方法,但是运行显示出来不正确,但是你去点击一下,就变正常了。。怎么回事???

如果把layoutsubviews注释掉,就是默认的图片在左,文字在右,那样没问题。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

拔了角的鹿 2022-09-08 17:58:15

http://stackoverflow.com/questions/4564621/aligning-text-and-image-on-uibutton-with-imageedgeinsets-and-titleedgeinsets
如果你看不了的话,了解一下UIEdgeInsets,方法如下:

[button setTitleEdgeInsets:UIEdgeInsetsMake(0, -image.size.width, 0, 0)];
[button setImageEdgeInsets:UIEdgeInsetsMake(0, button.titleLabel.bounds.size.width, 0, 0)];
猫腻 2022-09-08 17:58:15

上面兄台'Fnoz'的说到了点子上, 但不够准确. 这样的结果恰好居中并重叠.

  • 更正:

[button setTitleEdgeInsets:UIEdgeInsetsMake(0, -image.size.width * 2, 0, 0)];
[button setImageEdgeInsets:UIEdgeInsetsMake(0, button.titleLabel.bounds.size.width * 2, 0, 0)];
  • 改进及扩展:

    // 还可增设间距
    CGFloat spacing = 3.0;

    // 图片右移
    CGSize imageSize = button.imageView.frame.size;
    button.titleEdgeInsets = UIEdgeInsetsMake(0.0, - imageSize.width * 2 - spacing, 0.0, 0.0);

    // 文字左移
    CGSize titleSize = button.titleLabel.frame.size;
    button.imageEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, - titleSize.width * 2 - spacing);
    
    /* 小结: imageEdgeInsets 为'上左下右', 正值远离中心, 负值向中心聚拢. 具体以单词'inset'来记忆 */

参考自: http://stackoverflow.com/questions/2451223/uibutton-how-to-center-an-image-and-a-text-using-imageedgeinsets-and-titleedgei

嘿咻 2022-09-08 17:58:15

上面的都略复杂: 这个比较简略

[button setTitleEdgeInsets:UIEdgeInsetsMake(0, -image.size.width, 0, image.size.width)];
[button setImageEdgeInsets:UIEdgeInsetsMake(0, button.titleLabel.bounds.size.width, 0, -button.titleLabel.bounds.size.width)];
无尽的现实 2022-09-08 17:58:15

你解决了吗 我也遇到了这个问题了 咋办呢

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文