2016-06-30 4 views
1

DetailViewController보기가 MasterViewController에 의해 가려지지 않도록 일 때 DetailViewController의 프레임을 변경하고 싶습니다. 위의 답변에 설명 된대로 viewDidLayoutSubviews 메서드를 사용하여 사용자 정의 UISplitViewController를 사용하여 iPad 세로 방향으로 splitViewController?.displayMode == .PrimaryHidden에서 splitViewController?.displayMode == .PrimaryOverlay으로 탐색 할 때이 작업을 수행 할 수있었습니다. 아래는 Change the width of Master in UISplitViewController입니다 (아래 참조). 저는 스토리 보드에있는 UISplitViewController를 SplitViewController에 연결했으며, iPad에서는 초기 앱로드시 viewDidLayoutSubviews()이 호출됩니다. 내가 splitViewController?.displayMode == .PrimaryOverlay에서 오전, 이후 MasterViewController에서 다른 항목을 선택하면UISplitViewController의 하위 클래스에있는 DetailViewController의 프레임을 업데이트하십시오.

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() 
    } 

는 그러나 DetailViewController 프레임은 다시 기본 프레임 크기와 위치로 되돌아갑니다. ,

MasterViewController.swift 내가 MasterViewController.swiftsplitViewController?.viewDidLayoutSubviews()에서 항목을 선택하면 이제 호출되고

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

:이 다음 (이 방법으로 viewDidLayoutSubviews()를 호출하지 않는 것이 좋습니다 있지만)를 사용하여 해결하기 위해 노력했다 그러나 DetailViewController의 view.frame.origin.xview.frame.widthviewDidLayoutSubviews() 끝에 인쇄 할 때 이상한 판독 값을 얻습니다. 그리고 만들어진 것으로 보이는 프레임에 대한 이러한 변경 사항이 있더라도 DetailViewController보기가 여전히 흐리게 나타납니다.

DetailViewController 프레임을 수정하여 MasterViewController에서 새 항목을 선택할 때도 가려지지 않도록하는 것이 도움이된다면 감사하겠습니다. 이 문제를 해결하기 위해 UISplitViewController 대리자 방법을 구현하지 못한 나는 didSelectRowAtIndexPath 끝에 loadView과 함께 SplitViewController을 다시로드하려고 시도했지만 이로 인해 iPad 화면이 정지되었습니다.

답변

2

iPad로 이동할 때 마스터 및 디테일 뷰 컨트롤러를 오버레이없이 나란히 배치하는 방법을 알고 싶다면 누구나 쉽게 할 수 있습니다! preferredDisplayMode = .AllVisible을 추가하십시오. MGSplitViewController과 같은 사용자 지정 SplitViewController를 사용하거나 분할 뷰 컨트롤러의 프레임을 변경할 필요가 없습니다. :-)