2014-09-21 5 views
1

Shown on 10.10, but reproduced on 10.7 and above자동 레이아웃 제약 조건 만 에지 타격 후 순종

(10.10에 표시하지만, 위의 10.7 재현) 내가 NSOutlineView 및로드하여 시작하는 맥 메뉴 표시 줄 응용 프로그램을 가지고

몇 개의 뷰 기반 셀을 채 웁니다. 셀을 선택하면 NSOutlineView가 숨겨지고 새로운 NSTableView (TicketViewController)가 표시됩니다. 커스텀 NSTableViewCell (CommentComposeCellView)은 NSTextView와 NSImageView와 NSButton을 포함하는 커스텀 NSView (CommentComposeFooterView)를 포함합니다. NSTableViewCell과 커스텀 NSView는 Autolayout 제약 조건을 가지고 있기 때문에 포함 된 윈도우의 크기와 일치해야합니다. 그러나 윈도우 크기를 조정할 때 윈도우의 가장자리가 커스텀 NSView에 닿을 때까지 커스텀 NSView의 크기가 조정되지 않습니다.

-(void)outlineViewSelectionDidChange:(NSNotification *)notification{ 
if ([self.outlineView selectedRow] != -1) { 
    id clickedItem = [self.outlineView itemAtRow:[self.outlineView selectedRow]]; 
if ([clickedItem isKindOfClass:[Request class]]){ 
     [self.ticketViewController displayRequest:clickedItem]; 
     [self.scrollView setHidden:YES]; 

     NSView *contentView = [self.window contentView]; 
     [[self.ticketViewController view] setFrame:[contentView bounds]]; 
     [[self.ticketViewController view] setTranslatesAutoresizingMaskIntoConstraints:NO]; 
     [contentView addSubview:[self.ticketViewController view]]; 
     NSView *ticketView = [self.ticketViewController view]; 
     NSDictionary *views = NSDictionaryOfVariableBindings(ticketView); 
     [contentView addConstraints: 
     [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[ticketView]|" 
               options:0 
               metrics:nil 
                views:views]]; 

     [contentView addConstraints: 
     [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[ticketView]|" 
               options:0 
               metrics:nil 
                views:views]]; 
} 
} 

}

enter image description here

+0

가 (셀보기를 작성 코멘트)의 수퍼에 작성 글보기 댓글 관련하는 제약이 있는가에 ? 추적하지 못하는 "답장 추가"버튼뿐만 아니라 배경에 표시된대로 볼 수 있습니다. 또한 IB는 제약 오류 (빨간색 원 안에있는 화살표)를 나타냅니다. 당신은 그 문제를 해결해야합니다. –

+0

안녕하세요 Ken, 댓글 작성 꼬리말보기에 superview 제약 조건을 적용 할 수있는 공간이 있습니다. 또한 레이아웃 문제가 해결되었습니다. 프로그래밍 방식으로 이러한 셀이 살고있는 테이블 열의 크기를 조정하여이 문제를 해결할 수 있었지만 자동 레이아웃에서 처리 할 수없는 이상한 것처럼 보입니다. – joshbillions

+0

원본 문제와 관련없는 부분 : 보기가 자동 레이아웃 모드에있는 한 프레임을 직접 설정할 필요가 없습니다. [[[self.ticketViewController view] setFrame : [contentView bounds]];'사용자가 설정 한 프레임 값 뷰 레이아웃 단계에서 덮어 쓰게됩니다. '-setFrame :'은 여전히 ​​하위 트리에 대한 자동 레이아웃 모드를 선택 해제하고 하위 뷰를 수동으로 레이아웃하는 경우에만 유용 할 수 있습니다. –

답변

1

추가

[tableColumn setWidth:self.view.superview.frame.size.width] 

- (NSView *)tableView:(NSTableView *)tableView 
    viewForTableColumn:(NSTableColumn *)tableColumn 
        row:(NSInteger)row