Xamarin iOS开发iPhone12/13 mini模拟器时间选择器Done工具栏不显示是否为Bug
问题根因
- 该问题并非iPhone 12 mini/13 mini的系统Bug,是代码中对自适应弹性控件硬设固定宽度导致的小屏适配异常:
你给UIBarButtonSystemItem.FlexibleSpace类型的控件手动设置了Width = MainWidth - 50,而iPhone 12/13 mini的屏幕宽度比其他型号更小,固定宽度超过了工具栏的可用空间,会导致按钮布局溢出、无法正常显示。
修复方案
- 移除弹性空间的固定宽度设置:
FlexibleSpace的作用就是自动填充工具栏内的剩余空白区域,不需要手动指定宽度,删除对应赋值代码即可适配所有屏幕尺寸。 - 调整工具栏方法调用顺序:先给工具栏设置完所有按钮项,再调用
SizeToFit()方法,避免高度计算异常。
修改后的核心代码片段
// 原flexibleSpace代码移除Width设置 var flexibleSpace = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace, target: null, action: null); if (objUITextField.AccessibilityValue == "endtime") { UIBarButtonItem clearButton = new UIBarButtonItem("Clear", UIBarButtonItemStyle.Plain, (s, e) => { //code }); toolbar.SetItems(new UIBarButtonItem[] { doneButton, flexibleSpace, clearButton, cancelButton }, true); } else { toolbar.SetItems(new UIBarButtonItem[] { doneButton, flexibleSpace, cancelButton }, true); } // 调整SizeToFit位置,放在设置items之后 toolbar.SizeToFit(); //Display the toolbar over the pickers objUITextField.InputAccessoryView = toolbar; objUITextField.InputView = picker; picker.SizeToFit(); //Add this in ios14 picker.SetNeedsDisplay();
内容的提问来源于stack exchange,提问作者Mark Allen
相关产品推荐
相关产品推荐

