Xamarin.ios UIPopoverController中的UINavigationBar如果以编程方式创建,看起来很难看
我想在特定操作发生后(例如,点击按钮)在代码中打开弹出窗口 下面的代码允许我使用导航栏打开Popover,但它看起来不像我使用IB所做的(IB方法是在UINavigationController中嵌入UIViewController,并定义两个按钮cancel和save)。我唯一想要的就是把这两个钮扣放在流行音乐的上方。我不使用任何导航功能Xamarin.ios UIPopoverController中的UINavigationBar如果以编程方式创建,看起来很难看,xamarin.ios,uinavigationbar,uipopovercontroller,Xamarin.ios,Uinavigationbar,Uipopovercontroller,我想在特定操作发生后(例如,点击按钮)在代码中打开弹出窗口 下面的代码允许我使用导航栏打开Popover,但它看起来不像我使用IB所做的(IB方法是在UINavigationController中嵌入UIViewController,并定义两个按钮cancel和save)。我唯一想要的就是把这两个钮扣放在流行音乐的上方。我不使用任何导航功能 var cell = grid.VisibleCellAtCoordinate(coordinate) as SDataGridTextCe
var cell = grid.VisibleCellAtCoordinate(coordinate) as SDataGridTextCell;
var viewController = new UIViewController();
var navBar = new UINavigationBar(new RectangleF(0, 0, viewController.View.Bounds.Width, 50))
{
AutoresizingMask = UIViewAutoresizing.FlexibleWidth,
BarStyle = UIBarStyle.Black,
Translucent = true,
Items = new[]
{
new UINavigationItem("test")
{
LeftBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Cancel, (s, e) => { _popoverController.Dismiss(true); }),
RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Save, (s, e) => { _popoverController.Dismiss(true); })
}
}
};
var textField = new UITextField(new RectangleF(0, 50, viewController.View.Bounds.Width, viewController.View.Bounds.Height)) { Placeholder = "Mein Text...", BackgroundColor = UIColor.White };
textField.BecomeFirstResponder();
viewController.View.Add(navBar);
viewController.View.Add(textField);
viewController.View.SubviewAdded(textField);
_popoverController = new UIPopoverController(viewController);
_popoverController.SetPopoverContentSize(new SizeF(250, 200), false);
_popoverController.PresentFromRect(cell.Bounds, cell, UIPopoverArrowDirection.Any, false);
这些按钮看起来像下图(丑陋):此图显示了在IB中创建时的外观:
这是在popover中使用独立导航栏的注意事项之一。据我所知,将视图控制器嵌入导航控制器是唯一可以避免的方法。将内容视图(UIViewController)正确嵌入到UINavigationController时遇到一些问题,因为我每次都试图将导航栏项(按钮)直接添加到UINavigationController的NavigationItem属性。但这必须通过内容视图控制器完成
var contentViewController = new UIViewController();
var textField = new UITextField(contentViewController.View.Bounds)
{
BackgroundColor = UIColor.White,
AutoresizingMask = ~UIViewAutoresizing.None,
Placeholder = "My Text..."
};
contentViewController.View.Add(textField);
var navigationController = new UINavigationController(contentViewController);
contentViewController.Title = "Popover";
contentViewController.NavigationItem.LeftBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Cancel, (s, e) => { _popoverController.Dismiss(false); });
contentViewController.NavigationItem.RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Save, (s, e) => { _popoverController.Dismiss(false); });
_popoverController = new UIPopoverController(navigationController);
_popoverController.SetPopoverContentSize(new SizeF(300, 300), false);
_popoverController.PresentFromRect(button1.Bounds, button1, UIPopoverArrowDirection.Any, false);
谢谢,我已经根据您的答案添加了我的新解决方案!现在的外观与IB中设计的相同。