You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS开发:UIBarButtonItem自定义按钮的合适尺寸问题

解决iPad Pro(11.0)上UIToolbar自定义Done按钮的尺寸问题

嘿,我来帮你搞定这个自定义按钮显示不佳的问题!

首先得理清iOS里「逻辑点(pt)」和「像素(px)」的区别——咱们布局用的是逻辑点,而图片要适配不同屏幕倍率(2x/3x)提供对应像素的资源,这是关键。

为什么你的现有尺寸显示不好?

你用的80×30、156×57应该是像素尺寸,iPad Pro 11寸的屏幕倍率是2x,系统会把1x图(80×30)拉伸到160×60像素,而iPad上UIToolbar的默认高度只有56pt(对应112像素),拉伸后的按钮高度接近Toolbar高度,很容易出现裁剪、变形的问题;156×57的图虽然接近2x的比例,但没对齐标准Toolbar高度,视觉上也会不协调。

推荐的合适尺寸方案

1. 先确定按钮的逻辑点尺寸(核心)

UIToolbar在iPad上的标准高度是56pt,建议你的按钮高度设置为44pt或56pt

  • 选44pt:和iPhone端Toolbar按钮高度一致,跨设备视觉统一,宽度可以设为80pt(和你原来的设计宽度匹配)
  • 选56pt:填满Toolbar高度,视觉更饱满,宽度按设计比例调整即可

2. 对应倍率的图片像素尺寸

根据逻辑点尺寸,生成对应倍率的图片:

  • 如果是80pt×44pt的按钮:
    • 2x图(适配iPad Pro 11寸等2倍屏):160×88 px
    • 3x图(适配iPhone等3倍屏):240×132 px
  • 如果是100pt×56pt的按钮:
    • 2x图:200×112 px
    • 3x图:300×168 px

3. 优化代码的小技巧

别直接用图片的像素尺寸设置按钮frame,改用逻辑点+图片自适应:

UIImage *img_done = [UIImage imageNamed:DONE_RED_BTN_PNG(appDelegate.isIphone)];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
// 用逻辑点设置按钮尺寸
btn.frame = CGRectMake(0.0, 0.0, 80, 44);
// 设置图片自适应模式,避免拉伸变形
btn.imageView.contentMode = UIViewContentModeScaleAspectFit;
[btn setImage:img_done forState:UIControlStateNormal];
[btn addTarget:self action:@selector(doneClicked) forControlEvents:UIControlEventTouchUpInside];

btnNextDoneDisable = [[UIBarButtonItem alloc] initWithCustomView:btn];
[arrButtons addObject:btnNextDoneDisable];
navigateQuestionBar.items = arrButtons;

要是用Auto Layout的话,效果会更稳——给按钮添加width和height约束,完全不用硬编码frame,适配各种设备更省心。

内容的提问来源于stack exchange,提问作者User_1191

火山引擎 最新活动