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
- 2x图(适配iPad Pro 11寸等2倍屏):
- 如果是100pt×56pt的按钮:
- 2x图:
200×112 px - 3x图:
300×168 px
- 2x图:
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




