如何让UIButton关联的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
相关产品推荐
相关产品推荐

