带有 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
实例添加为window
的rootViewController
。
【讨论】:
以上是关于带有 MGSplitViewController 的弹出窗口 - 方向问题的主要内容,如果未能解决你的问题,请参考以下文章
MGSplitViewController 与所有 github 补丁?
iOS8 MGSplitViewController 替代品
在 UISplitViewController 中隐藏 MasterView
带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName