我有一个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#项目。
非常感谢任何指针或帮助!
答案 0 :(得分:6)
我在最近发布到应用程序商店的应用程序遇到了同样的问题。
当您在iPad上显示UIActionSheet
时,iOS会将UIActionSheet
包裹在UIPopoverView
中。
我使用以下代码来检测这是否是iPad,如果是,请调整弹出视图的框架:
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(Normal和DatePicker)