나는 지난 몇 일에 한 조사를 공유하고 싶어를 (같은 "주의"응용 프로그램은 하나의 NSSplitView 이루어집니다 모양). NSSplitView가 부분적으로 원하는 방식으로 동작 할 수있게되었습니다. 아직 완벽한 해결책은 아닙니다. 그러나 누군가가 내가 할 수없는 부분에 대한 대답을 도울 수 있기를 바랍니다.
"메모"앱은 단일 NSSplitView를 사용합니다.
위의 스크린 샷은 엑스 코드 6 Veiw 디버거 모드로 실행 "참고 사항"응용 프로그램을 보여줍니다.
NSSplitView의 MainSplitView라는 하위 클래스입니다.
디바이더 크기를 조정할 때 "Notes"앱의 분할보기가 원하는 방식으로 작동하는 방법을 연구하려면 Xcode Instruments의 "Cocoa Layout"도구로 열어 디바이더 0을 오른쪽으로 움직일 때 제약 이벤트를 연구하십시오.
내가 큰 차이가 있음을 발견
... 구속 이벤트를 공부하고 로그 내 샘플 응용 프로그램의 원래 버전을 실행 생성과 비교 ... 분할보기의 왼쪽 가장자리가있는 가장 오른쪽의 하위보기와 "메모"앱의 "낮은"우선 순위 사이의 제약이 있습니다. 유사한 제약 조건이 샘플 애플리케이션에서 "필수"우선 순위를가집니다.
그래서, 내 자신의 MainSplitView를 구현하려고했습니다. 낮은 우선 순위가 제약 조건에 설정되도록 "addConstraints :"메서드를 재정의하십시오.
- (void)addConstraints:(NSArray *)constraints {
NSLog(@"adding constraints: %@", constraints);
NSLayoutConstraint * theConstraint = constraints.firstObject;
if (theConstraint.firstItem == self.subviews.lastObject && theConstraint.secondItem == self) {
theConstraint.priority = NSLayoutPriorityDefaultLow;
[super addConstraints:@[theConstraint]];
} else {
[super addConstraints:constraints];
}
NSLog(@"========== constraings affecting layout ===========");
for (NSView * theView in self.subviews) {
NSLog(@"view: %@\n%@", theView, [theView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationHorizontal]);
}
}
코드 here을 찾을 수 있습니다.
변경 후 내 샘플 앱, 구분선 0을 드래그하면 가운데 서브 뷰가 오른쪽으로 밀리고 너비가 유지되어 맨 오른쪽 뷰가 압축됩니다.
하지만 지금은 ... 나는 또 다른 문제로 실행 ...
내가 분할 공을 이동 때마다, 그것을 할 수있는 유일한 이동, 최대, 분할 1.
의 시작 위치에
다른 제약 조건 구성 문제입니까? 또는 NSSplitView의 다른 초기 동작을 사용자 정의해야합니까?
도움이 필요하십니까?
감사 빌
"NSSplitViewDelegate Protocol"을 보았습니까? Interface Builder의 우선 순위 설정을 통해서만 행동을 취할 수는 없습니다. 프로토콜은 하위 뷰의 크기와 분할 위치를 사용자 정의 할 수있는 몇 가지 추가 기회를 제공합니다. –
동의합니다. 지난 며칠 동안 자동 레이아웃으로 어려움을 겪었습니다. 나는 문제의 일부를 풀 수 있지만, 그렇지 않은 것이 하나 있습니다 ... – billibala