Monotouch - UIActionSheet 无法在 iPad 上正确显示
Posted
技术标签:
【中文标题】Monotouch - UIActionSheet 无法在 iPad 上正确显示【英文标题】:Monotouch - UIActionSheet not displaying correctly on iPad 【发布时间】:2012-09-30 14:38:55 【问题描述】:我有一个 UIActionSheet 可以在 iPhone 模拟器上正常工作。它在用户触摸 UIButton 时呈现。
使用 iPad,我相信 UIActionSheets 被包装到 UIPopupController 中。
当我使用 iPad 模拟器调用相同的代码时,会显示一条细“线”,它看起来像 UIPopupController(您可以看到通常指向控件的小箭头)。看不到任何内容。
使用带有 MonoTouch 的 iPad 使用 UIActionSheet 的正确方法是什么?这是我一直在测试的一些示例代码 - 创建 UIActionSheet:
var actionSheet = new UIActionSheet () Style = UIActionSheetStyle.BlackTranslucent ;
actionSheet.Frame = actionSheetFrame;
actionSheet.Clicked += (s, e) => Console.WriteLine ("Clicked on item 0", e.ButtonIndex); ;
actionSheet.AddSubview (doneButton);
然后,我通过从按钮调用以下命令来显示操作表:
btnSay.TouchUpInside += (sender, e) =>
actionSheet.ShowFrom(tmpBtn.Frame, tmpView, false);
;
我在使用 iPad 模拟器时得到了类似于所附屏幕截图的内容。
作为参考,这是使用 iPhone 模拟器时 UIActionSheet 的外观。
注意:该项目是一个通用的单视图 MonoTouch c# 项目。
任何指点或帮助将不胜感激!
【问题讨论】:
当btnSay被触摸时,tmpBtn.Frame是什么? tmpView 呢?我猜你想在 btnSay.Superview 中显示来自 btnSay.Frame 的 actionSheet。 嗨 Jacob,tmpBtn.Frame 是主视图上按钮的框架/矩形。 tmpView 本质上只是“视图”,即当前显示的主视图。我会试试你说的 - 谢谢! 嗨,Jacob,对不起,我看到你现在在说什么 - 之前有点匆忙。是的,就目前而言,我已经尝试像这样显示 actionSheet - 使用 3 x 参数 - 按钮 btnSay.Frame 的框架,按钮的超级视图,以及动画与否的真/假。像这样,我遇到了上面截图中描述的问题。 【参考方案1】:我最近发布到应用商店的应用也遇到了同样的问题。
当您在 iPad 上显示 UIActionSheet
时,ios 会将 UIActionSheet
包装在 UIPopoverView
中。
我用下面的代码来检测这是否是iPad,如果是,则调整popover view的frame:
const int CHROMEWIDTHLEFT = 9;
const int CHROMEWIDTHRIGHT = 8;
const int MARGIN = 50;
UIActionSheet _actionSheet;
...
if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad)
var popover = _actionSheet.Superview.Superview;
if (popover != null)
var x = _actionSheet.Frame.X + MARGIN;
var y = (UIScreen.MainScreen.ApplicationFrame.Height - _actionSheet.Frame.Height) / 2;
var width = _actionSheet.Frame.Width - (MARGIN * 2);
var height = _actionSheet.Frame.Height;
popover.Frame = new RectangleF (x, y, width, height);
_actionSheet.Frame = new RectangleF (x, y, width - (CHROMEWIDTHLEFT + CHROMEWIDTHRIGHT), height - (CHROMEWIDTHLEFT + CHROMEWIDTHRIGHT));
该示例基于 Xamarin ActionSheet 日期选择器 here
我已将这些设置为 Gist(普通和 DatePicker)
【讨论】:
您好 Macropus,感谢您发布您的解决方案。明天我会试一试,然后报告。我的问题实际上是修改框架本身 - 所以这看起来很有希望! 嗨,Macropus,很抱歉没有就此回复您 - 我尝试了一下,没有任何运气,但认为我这边有问题 - 我被赶上了在业务中并计划再次尝试 - 可能在周末。一旦我有更好的外观,我会尽快回到这里! (可能在接下来的一周内)。感谢您回来查看。以上是关于Monotouch - UIActionSheet 无法在 iPad 上正确显示的主要内容,如果未能解决你的问题,请参考以下文章
从 UIActionSheet 访问 UIPopoverController
swift 创建第一个UIAlertView 和UIActionSheet
iOS:简单使用UIAlertVIew和UIActionSheet