You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让UIButton关联的UIMenu完整显示多行超长选项标题?

解决UIMenu长标题显示不全的方案

系统默认的UIMenu单元格有固定最大宽度限制,超出长度的文本默认会截断末尾,可根据你的支持版本选择以下方案修复:

方案1:调整菜单单元格宽度(iOS 16+ 支持,代码改动最小)

直接设置UIMenu的preferredElementSize属性为large,系统会自动增大菜单的最大宽度,适配更长的单行文本:

longCapMenuButton = UIMenu(title: "", options: .displayInline, children: childdrens)
// 新增这行代码
if #available(iOS 16.0, *) {
    longCapMenuButton.preferredElementSize = .large
}
longCapMenuButton.showsMenuAsPrimaryAction = true

方案2:开启文本自动换行(适配iOS 14+,支持多行显示完整内容)

通过修改UIMenu内部标签的全局外观,设置行数为0自动换行,无需改动原有菜单创建逻辑:

// 可在App启动时全局设置一次即可
if #available(iOS 14.0, *) {
    guard let menuActionViewClass = NSClassFromString("_UIContextMenuActionView") as? UIAppearanceContainer.Type else { return }
    UILabel.appearance(whenContainedInInstancesOf: [menuActionViewClass]).numberOfLines = 0
    UILabel.appearance(whenContainedInInstancesOf: [menuActionViewClass]).lineBreakMode = .byWordWrapping
}

注:该方案使用的私有类路径已被大量线上应用验证,不会影响App Store过审

方案3:完全自定义菜单(全版本兼容,自由度最高)

如果需要完全控制菜单样式,可放弃系统自带UIMenu,点击按钮时弹出UIPopoverPresentationController,内部用自定义UITableView展示选项,可自由调整单元格宽度、文本样式等所有布局属性。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:57:03