2013-10-29 1 views
0

내 문서 기반 OS X 응용 프로그램에서는 "show vertical scroller"가 설정된 xib에 빈 NSScrollView가 있습니다. 런타임에 NSScrollView에 대한 문서보기로 설정 한 탐색 용 단추가있는보기를 생성합니다. 대부분의 경우이 방법이 효과적이지만 시간의 약 25 %는 겉보기에 무작위로 (또는 적어도 특정 조건을 재현 할 수 없습니다!) 측면의 스크롤러 대신 검정색 막대가 나타납니다. 스크롤러가 있어야합니다. 창 크기를 조정하면 검정색 막대가 사라지고 스크롤러가 나타나 잘 작동합니다.NSScrollView는 때때로 스크롤러 대신 검은 색 막대를 가지고 있습니다.

결과적으로 6 개 또는 7 개의 빈 문서를 차례로 열면 약 3 개는 즉시 작동하는 scrollviews를 가지지 않습니다.

다음은 탐색 버튼을 사용하여보기를 만들고 NSScrollview의 documentView로 추가하는 코드입니다.

YMScrollDocView는 isFlipped를 YES로 설정하는 NSView의 하위 클래스입니다. navScrollView는 xib에서 scrollview의 콘센트입니다.

float allHeight = 0.f; // Consider starting from the top 
//float xOffset = 2.f; // Offset addjustments 
float spacing = 4.f; // Spacing 
float buttonCellHeight = 40.f; 

YMScrollDocView *navView = [[YMScrollDocView alloc]init]; 

//1 
NSButton *overviewButton = [[NSButton alloc]initWithFrame:NSMakeRect(0, allHeight, self.navScrollView.bounds.size.width, buttonCellHeight)]; 

[overviewButton setTitle:@"Overview"]; 
[overviewButton setButtonType:NSMomentaryLight]; 
[overviewButton setBordered:NO]; 
[[overviewButton cell]setBackgroundColor:[self colorWithHexColorString:@"30BDF8"]]; 
[overviewButton setBezelStyle:NSRegularSquareBezelStyle]; 
[overviewButton setButtonType:NSCellIsBordered]; 
[overviewButton setTarget:self]; 
[overviewButton setAction:@selector(goToOverview)]; 
[overviewButton setRefusesFirstResponder:YES]; 
[navView addSubview:overviewButton]; 
allHeight += buttonCellHeight; 
allHeight += spacing; 


//2 
NSButton *curriculumButton = [[NSButton alloc]initWithFrame:NSMakeRect(0, allHeight, self.navScrollView.bounds.size.width, buttonCellHeight)]; 

[curriculumButton setTitle:@"Curriculum"]; 
[curriculumButton setButtonType:NSMomentaryLight]; 
[curriculumButton setBordered:NO]; 
[[curriculumButton cell]setBackgroundColor:[self colorWithHexColorString:@"36FBF8"]]; 
[curriculumButton setBezelStyle:NSRegularSquareBezelStyle]; 
[curriculumButton setButtonType:NSCellIsBordered]; 
[curriculumButton setTarget:self]; 
[curriculumButton setAction:@selector(goToCurriculum)]; 
[curriculumButton setRefusesFirstResponder:YES]; 
[navView addSubview:curriculumButton]; 
allHeight += buttonCellHeight; 
allHeight += spacing; 

은 (내가 다음 코드로 마무리, 여기에 반복적 인 코드로 더 많은 버튼을 추가 할 수 있습니다.) 나는 (약간 스크롤바를 참조하도록 수정) 코드를 실행

[navView setFrame:NSMakeRect(1, 1, self.navScrollView.bounds.size.width, allHeight)]; 
[[self navScrollView]setDocumentView:navView]; 
+0

내 생각 엔 임베디드 뷰를 원하는 크기가되도록해야한다고 생각합니다. (스콜 뷰 크기로 크기를 조정하지 마십시오). 스크롤 뷰는 나머지 부분에 대해 걱정할 것입니다. – trojanfoe

+0

삽입 된 뷰에 설정된 너비를 지정하여 전환했지만 여전히 동일한 동작을 얻고 있습니다. –

답변

0

. Interface Builder에서 NSScrollView에 어떤 속성을 설정 했습니까? 또한 문서 뷰 등을 설정하는 곳은 무엇입니까? (위의 코드). NSDocument의 아래 메서드에서 모두 초기화하고 모두 잘 작동합니다!

- (void)windowControllerDidLoadNib:(NSWindowController *)aController 
{ 
    [super windowControllerDidLoadNib:aController]; 

    float allHeight = 0.f; // Consider starting from the top 
    float spacing = 4.f; // Spacing 
    float buttonCellHeight = 4000.f; 

    CustomView *navView = [[CustomView alloc]init]; 
    //1 
    NSButton *overviewButton = [[NSButton alloc]initWithFrame:NSMakeRect(0, allHeight, _scrollView.bounds.size.width, buttonCellHeight)]; 

    // Setup overviewButton properties 
    [navView addSubview:overviewButton]; 
    allHeight += buttonCellHeight; 
    allHeight += spacing; 

    //2 
    NSButton *curriculumButton = [[NSButton alloc]initWithFrame:NSMakeRect(0, allHeight, _scrollView.bounds.size.width, buttonCellHeight)]; 

    // setup curriculumButton properties 
    [navView addSubview:curriculumButton]; 
    allHeight += buttonCellHeight; 
    allHeight += spacing; 

    [navView setFrame:NSMakeRect(1, 1, _scrollView.bounds.size.width, allHeight)]; 
    [_scrollView setDocumentView:navView]; 
} 
+0

한 번에 하나씩 가능한 한 각 IB 설정을 뒤집어 봤습니다. –

+0

지금은 두 개의 체크 박스가 있습니다 : 수직 스크롤러 표시 및 서브 뷰 자동 크기 조정. 또한 자동 숨김 기능과 수평 스크롤러를 추가했습니다. 가로 스크롤러를 추가하면 두 스크롤러에서 비슷한 동작이 발생합니다. 경계선이없고 수평 및 수직 탄력성이 자동으로 설정됩니다. IB의 스크롤러에 대한 추가 설정이 없습니다. 기본 위치는 그대로 있습니다. 위 코드를 windowControllerDidLoadNib의 NSDocument 서브 클래스에서 호출하거나 거기에서 호출 된 별도의 메소드에서 같은 결과를 얻습니다. –

0

나는 아직도 완전하게이 문제를 해결하지 않은,하지만 난 내가 공유하고자 해키 솔루션과 함께 올라와있다. 지금 당장은 시작한 직후 창의 크기를 조정하는 별도의 메서드를 호출하려고합니다.

[self performSelector: @selector(resizeWidth) withObject: nil afterDelay:0.0f]; 

이 호출 :이 windowControllerDidLoadNib의 끝에 나는 그것이 사용자의 눈을 잡는다 매우 작은 애니메이션을 생성 특히,이 솔루션을 사랑하지 않는

-(void)resizeWidth 
{ 
NSRect newFrame = NSMakeRect(oldFrame.origin.x, oldFrame.origin.y, 975, oldFrame.size.height); 
[[self docWindow]setFrame:newFrame display:YES animate:YES]; 
} 

, 그러나 그것은이다 매우 신속하고 종종 눈에 띄지 않으며 항상 원래의 문제보다 덜 관입합니다. 최소한이 방법으로 앱의 스크롤러는 사용자가 즉시 사용할 수 있으며 UI의 기능은 사용자가 창 크기를 조정하지 않아도 작동합니다.

+0

언제든지 프로젝트의 우편 번호를 사용할 수 있습니까? –

+0

나는 버전을 제출하는 것을 마무리 짓고있다. 이것에 관심을 가져 주셔서 감사합니다! –

관련 문제