带有 MGSplitViewController 的弹出窗口 - 方向问题

Posted

技术标签:

【中文标题】带有 MGSplitViewController 的弹出窗口 - 方向问题【英文标题】:Popover with MGSplitViewController inside - Orientation Issue 【发布时间】:2014-02-13 12:54:10 【问题描述】:

我正在寻找一种如何在 PopoverController 中获取 SplitViewController 的方法。 (Popover with Splitview inside)

现在我使用 MGSplitViewController 完成了这项工作,但我有这样的问题,取决于方向的布局问题。

1.当我设置时

showsMasterInPortrait = YES;

看起来像这样:http://i.stack.imgur.com/Bd31R.png

2.当我设置时

showsMasterInLandscape = YES;

看起来像这样:http://i.stack.imgur.com/oWCSp.png

我的目标是拥有一个带有 Master 的 SplitView | Detail 部分(如案例 1),其中 Detail 将其内容拉伸到与 popover-controller 的宽度相同的宽度。

这是我的代码:

MGSplitViewController *customSplitVC = [[MGSplitViewController alloc] init];

customSplitVC.showsMasterInPortrait = YES;
customSplitVC.view.backgroundColor = [UIColor whiteColor];
[customSplitVC setSplitPosition:400 animated:YES];

DetailViewController *detailViewController = (DetailViewController*)[storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
detailViewController.title = @"Detail";

ListViewController *listViewController = [[ListViewController alloc] initWithDetailViewController:detailViewController];
listViewController.title = @"Master";
listViewController.content = self.myContent;

UINavigationController *detaillNC = [[UINavigationController alloc] initWithRootViewController:detailViewController];

listViewController.detailViewController = detailViewController;

UINavigationController *masterNC = [[UINavigationController alloc] initWithRootViewController:listViewController];
customSplitVC.viewControllers = [NSArray arrayWithObjects:masterNC, detaillNC, nil];
customSplitVC.delegate = detailViewController;

UINavigationController *customSplitNC = [[UINavigationController alloc] initWithRootViewController:customSplitVC];

UIBarButtonItem *btnCancel = [[UIBarButtonItem alloc] initWithTitle:@"X" style:UIBarButtonItemStyleDone target:self action:@selector(dismissPopover)];
customSplitVC.navigationItem.rightBarButtonItem = btnCancel;

self.popover = [[UIPopoverController alloc] initWithContentViewController:customSplitNC];
self.popover.delegate = self;
self.popover.popoverContentSize = CGSizeMake(1000, 500);

CGRect rect = CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/2, 1, 1);

[self.popover presentPopoverFromRect:rect inView:self.view permittedArrowDirections:0 animated:NO];

感谢您的帮助

【问题讨论】:

如果有人想用MGSplitViewController,或者已经用过还能改,那我劝你不要用。我从事过一个使用它的项目,我必须说它一团糟。整个设置的方式是业余的(我们都经历过这样的点,不是吗。)例如,旋转消息被手动传递给主视图控制器和细节视图控制器。如果它们被添加为容器控制器的子视图控制器,那么这将自动发生。这只是控制器的许多其他缺陷中的一个示例。 【参考方案1】:

试试这个:UINavigationController issue in the master view (ios 6)

我发现最简单的方法是在 -(void)setup 的末尾将以下内容添加到 MGSplitViewController.m

self.view.autoresizesSubviews = NO;

【讨论】:

感谢您的回复,但它对我不起作用(iOS7)。您使用 MGSplitViewController 的方向是什么? [self layoutSubviewsForInterfaceOrientation:toInterfaceOrientation withAnimation:YES]; 添加到-willRotateToInterfaceOrientation:duration:,它对我有用。【参考方案2】:

确保将MGSplitViewController 实例添加为windowrootViewController

【讨论】:

以上是关于带有 MGSplitViewController 的弹出窗口 - 方向问题的主要内容,如果未能解决你的问题,请参考以下文章

MGSplitViewController 与所有 github 补丁?

iOS8 MGSplitViewController 替代品

在 UISplitViewController 中隐藏 MasterView

嵌套的拆分视图控制器

使用 MGSplitView 控制器更改视图

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName