简体   繁体   English

更新UISplitViewController子类中的DetailViewController框架

[英]Update frame of DetailViewController in subclass of UISplitViewController

I wish to change the frame of DetailViewController when splitViewController?.displayMode == .PrimaryOverlay , such that the DetailViewController view is never obscured by the MasterViewController . 我希望在splitViewController?.displayMode == .PrimaryOverlay时更改DetailViewController的框架,以使DetailViewController视图不会被MasterViewController遮盖。 I have managed to get this working when navigating from splitViewController?.displayMode == .PrimaryHidden to splitViewController?.displayMode == .PrimaryOverlay in iPad portrait orientation, using a custom UISplitViewController with overriden viewDidLayoutSubviews method as described in jrc's answer here: Change the width of Master in UISplitViewController (see below). 在iPad纵向方向上,使用自定义UISplitViewController和重写的viewDidLayoutSubviews方法(如jrc的答案所述),从iPad纵向方向导航到splitViewController?.displayMode == .PrimaryHiddensplitViewController?.displayMode == .PrimaryOverlay splitViewController?.displayMode == .PrimaryHidden时,我已经设法使此工作正常工作:如jrc的答案所述: 更改宽度UISplitViewController中的Master (请参见下文)。 I have linked the UISplitViewController in storyboard to SplitViewController , and viewDidLayoutSubviews() is called on initial app load with iPad. 我已经将情节提要中的UISplitViewController链接到SplitViewController ,并且在iPad初始加载应用程序时调用了viewDidLayoutSubviews()

SplitViewController.swift SplitViewController.swift

override func viewDidLayoutSubviews() {

        var masterViewController = (self.viewControllers[0] as! UINavigationController).topViewController
        var detailViewController = (self.viewControllers[1] as! UINavigationController).topViewController

        // Adjust the width of the detail view
        var detailViewFrame = detailViewController!.view.frame
        detailViewFrame.origin.x += masterViewController!.view.frame.width
        detailViewFrame.size.width -= masterViewController!.view.frame.width
        detailViewController!.view.frame = detailViewFrame

        detailViewController!.view.setNeedsLayout()
    }

However, when I am in splitViewController?.displayMode == .PrimaryOverlay , and subsequently select a different item from MasterViewController , the DetailViewController frame reverts back to the default frame size and position. 但是,当我处于splitViewController?.displayMode == .PrimaryOverlay并随后从MasterViewController选择其他项目时,DetailViewController框架会恢复为默认的框架大小和位置。 I have tried to fix this using the following (although calling viewDidLayoutSubviews() in this way is not recommended): 我尝试使用以下方法解决此问题(尽管不建议以这种方式调用viewDidLayoutSubviews() ):

MasterViewController.swift MasterViewController.swift

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        collapseDetailViewController = false
        splitViewController?.viewDidLayoutSubviews()
    }

Now when I select an item in MasterViewController.swift splitViewController?.viewDidLayoutSubviews() is being called, but I get strange readings when printing the DetailViewController's view.frame.origin.x and view.frame.width at the end of viewDidLayoutSubviews() . 现在,当我在MasterViewController.swift选择一个项目时,将调用splitViewController?.viewDidLayoutSubviews() ,但是在viewDidLayoutSubviews()末尾打印DetailViewController的view.frame.origin.xview.frame.width时,会得到奇怪的读数。 And even with these changes to the frame which seem to have been made, the DetailViewController view is still being obscured. 即使对框架进行了这些更改,但似乎仍然看DetailViewController视图。

Would appreciate if some help on how to fix the DetailViewController frame so that it is never obscured even when selecting new items in a MasterViewController . 如果对如何修复DetailViewController框架有所帮助,以便即使在MasterViewController选择新项目也不会使其模糊,将不胜感激。 I have not had luck implementing any UISplitViewController delegate methods for solving this, and I also tried reloading the SplitViewController with loadView at the end of didSelectRowAtIndexPath but this caused a freeze of the iPad screen. 我还没有实现任何UISplitViewController委托方法来解决此问题,我还尝试在didSelectRowAtIndexPath的末尾用loadView重新加载SplitViewController ,但这导致iPad屏幕冻结。

For anyone else who wanted to know how to get the master and detail view controllers to go side by side without overlay when going onto an iPad, it's really easy! 对于想知道如何使主视图和局部视图控制器在iPad上不重叠的情况下并排显示的人来说,这真的很容易! Just add preferredDisplayMode = .AllVisible . 只需添加preferredDisplayMode = .AllVisible No need to use custom SplitViewControllers like MGSplitViewController or alter the frame of the Split View Controller. 无需使用自定义的SplitViewControllers(例如MGSplitViewController或更改Split View Controller的框架。 :-) :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 UISplitViewController,重用DetailViewController(Swift) - UISplitViewController, reuse DetailViewController (Swift) 仅在UISplitViewController的DetailViewController中呈现视图控制器 - Presenting a View controller only in the DetailViewController of UISplitViewController 为什么detailViewController不在UISplitViewController.viewControllers中? - Why detailViewController is not in UISplitViewController.viewControllers anymore? 在UISplitViewController应用程序中从DetailViewController获取MasterViewController - getting the MasterViewController from the DetailViewController in a UISplitViewController app 在UISplitviewCOntroller中将JSQMessagesViewController用作detailView时,KeyBoardToolBar只需要出现在DetailViewController中 - When using JSQMessagesViewController as detailView in UISplitviewCOntroller, KeyBoardToolBar needs to appear in DetailViewController only 当我在UISplitViewController中将iPad转到纵向模式时,调整detailViewController的pagecontrolview的大小 - Resize the pagecontrolview of detailViewController when i turn iPad to Portrait mode in UISplitViewController 子类UISplitViewController并设置自定义宽度 - Subclass UISplitViewController and set custom width 带有UISplitViewController的UIWindow子类不会旋转 - UIWindow subclass with UISplitViewController does not rotate 从App Deligate UISplitViewController(MobileVLCKit)中的DetailViewController访问活动的Mediaplayer - Access active Mediaplayer from DetailViewController in App Deligate UISplitViewController (MobileVLCKit) UISplitViewController:DetailViewController 中的 titleView 在横向上消失,预期行为? - UISplitViewController: titleView in DetailViewController disappears on landscape orientation, intended behaviour?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM