如果以编程方式创建 UIPopoverController 中的导航栏看起来很难看
Posted
技术标签:
【中文标题】如果以编程方式创建 UIPopoverController 中的导航栏看起来很难看【英文标题】:UINavigationBar in a UIPopoverController looks ugly if created programatically 【发布时间】:2013-08-06 15:30:26 【问题描述】:我想在发生特定操作(例如点击按钮)后在代码中打开弹出框。
下面的代码让我打开一个带有 NavigationBar 的 Popover,但它看起来不像我用 IB 所做的那样。 (IB 方法是在 UINavigationController 中嵌入 UIViewController 并定义两个按钮取消和保存)。我唯一想要的是将这两个按钮放在 Popover 的顶部。我不使用任何导航功能!
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 中创建时的样子:
【问题讨论】:
【参考方案1】:这是在弹出窗口中使用独立导航栏的注意事项之一。据我所知,将视图控制器嵌入导航控制器是避免它的唯一方法。
【讨论】:
谢谢,我已根据您的回答添加了新的解决方案!现在的外观和IB设计的一样。【参考方案2】:在将内容视图 (UIViewController) 正确嵌入到 UINavigationController 时遇到一些问题,因为我每次都尝试将导航栏项(按钮)直接添加到 UINavigationController' s 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);
【讨论】:
以上是关于如果以编程方式创建 UIPopoverController 中的导航栏看起来很难看的主要内容,如果未能解决你的问题,请参考以下文章
如果一切都是以编程方式创建而不使用情节提要,如何以编程方式调整 TableView 中单元格的高度?