2014-02-26 3 views
5

Autolayout을 사용하여 서브 뷰를 올바르게 크기를 조정하는 데 문제가 있습니다. 저의 요점을 설명하기 위해, 저는 최소한의 모범을 보였습니다.Cocoa Autolayout 및 Subview의 크기 조정

먼저 새 NSViewController를 만들고이 뷰에 하위 뷰 (NSTextView)를 추가하고 Autolayout 제약 조건을 추가했습니다.

enter image description here

나는 다음 내 MainMenu.xib에 사용자 정의보기를 추가하고 너무 그것에 대해 자동 레이아웃 제약 조건을 설정합니다.

enter image description here

마지막으로, 나는 내보기 컨트롤러의 인스턴스를 생성하고 내 사용자 정의보기 내부의보기를 넣습니다. "Autoresizes 서브 뷰"이후

#import "AppDelegate.h" 
#import "MyViewController.h" 

@interface AppDelegate() 
@property (weak) IBOutlet NSView *customView; 
@end 

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 

    [self.customView addSubview:myViewController.view]; 
    myViewController.view.frame = self.customView.bounds; 
} 

@end 

이 모두 XIB 파일에 체크, 나는 메인 창 크기를 조정할 때 크기를 조정하려면를 NSTextView을 기대. 그러나, 그것은 단지 제 위치에 있습니다.

enter image description here

내가 무슨 말이냐? 이것은 며칠 동안 나를 당황하게했다.

감사합니다, 마이클 크 누드 센

답변

3

귀하를 NSTextView의 포함 된 뷰가이 경우 귀하의 창에서 부모에 대한 제약이 없습니다. 뷰가 부모를 통해 제약 조건을 통해 "연결"되지 않았기 때문에 추가 한 뷰의 크기가 조정되지 않습니다. 프로그래밍 방식으로이 작업을 수행하려는 경우 addConstraint: 메서드를 조사 할 수 있습니다.

자세한 내용은 Apple's docs을 참조하십시오.

+0

,를 NSTextView (더 정확하게는 내장되어있는 NSScrollView가) 내보기 컨트롤러의 함께 IBOutlet보기의 하위 뷰 것으로 보인다. 자동 레이아웃 제약 조건은 해당 뷰와 관련이 있습니다. 맞습니까? –

+0

실제로 프로그래밍 방식으로 실험을 해봤지만 어떻게 든 크기를 조정하지 못하게되었습니다. 프로그래밍 방식으로 뷰를 추가 한 후에는 창 모서리 /면을 "잡아 당기는"것이 간단하지 않았습니다. 이제 문서로 돌아가서 한 번 더 시도해 보겠습니다. –

+0

예, 자동 레이아웃 제약 조건은 텍스트보기의보기 * (* 부모보기)를 기준으로합니다. – SevenBits

8

다른 사람이 같은 문제에 부딪 힐 경우를 대비해서. 나는이 방법으로 해결했다. (@SevenBits 덕택에 그 방향으로 나를 가리킨다.) 당신이 내 게시물의 첫 번째 스크린 샷을 보면

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 

    [self.customView addSubview:myViewController.view]; 

    myViewController.view.translatesAutoresizingMaskIntoConstraints = NO; 

    NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[subView]|" 
                      options:0 
                      metrics:nil 
                      views:@{@"subView" : myViewController.view}]; 

    NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[subView]|" 
                      options:0 
                      metrics:nil 
                      views:@{@"subView" : myViewController.view}]; 

    [self.customView addConstraints:verticalConstraints]; 
    [self.customView addConstraints:horizontalConstraints]; 
} 
+1

Brilliant. 이것은 받아 들여진 대답이어야합니다. – RajV