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.swift
splitViewController?.viewDidLayoutSubviews()
에서 항목을 선택하면 이제 호출되고
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
collapseDetailViewController = false
splitViewController?.viewDidLayoutSubviews()
}
:이 다음 (이 방법으로
viewDidLayoutSubviews()
를 호출하지 않는 것이 좋습니다 있지만)를 사용하여 해결하기 위해 노력했다 그러나 DetailViewController의
view.frame.origin.x
과
view.frame.width
을
viewDidLayoutSubviews()
끝에 인쇄 할 때 이상한 판독 값을 얻습니다. 그리고 만들어진 것으로 보이는 프레임에 대한 이러한 변경 사항이 있더라도
DetailViewController
보기가 여전히 흐리게 나타납니다.
DetailViewController
프레임을 수정하여 MasterViewController
에서 새 항목을 선택할 때도 가려지지 않도록하는 것이 도움이된다면 감사하겠습니다. 이 문제를 해결하기 위해 UISplitViewController
대리자 방법을 구현하지 못한 나는 didSelectRowAtIndexPath
끝에 loadView
과 함께 SplitViewController
을 다시로드하려고 시도했지만 이로 인해 iPad 화면이 정지되었습니다.