동적으로 크기를 조정하는 NSWindows에 대한 질문에 대한 많은 답변을 읽었습니다.동적으로 NSOutlineView의 높이를 기준으로 NSWindow의 크기를 조절하십시오.
메뉴 모음에서 표시되는 '팝업'창을 만들었으므로 NSPopover를 사용할 수 없습니다. 이는 디자인 측면에서 충분히 사용자 지정할 수 없기 때문입니다. 내 뷰 계층 전류는 다음과 같습니다
NSWindow Subclass
- NSView (clears the titlebar rendering, draws popover arrow)
- NSView (contentView)
- NSOutlineView (main table of content)
- NSView (window footer)
윈도우가 정확하게 항상 개요보기에 대한 올바른 높이도록 창, 계약 확대 NSOutlineView의 항목 및 계약과 확장을 위해 내가해야 할 것은, 바닥 글 및 상단의 팝 오버 화살표가 있습니다.
내용에 따라 개요보기에 필요한 높이를 계산하는 방법이 있습니다. 지금까지 콘텐트보기 컨트롤러에서 awakeFromNib
을 호출 한 다음 다시 위임 메서드 outlineViewItemDidCollapse:
과 outlineViewItemDidExpand:
을 호출했을 때 크기를 다시 계산하려고했지만 올바르게 창 크기를 조정할 수 없었습니다.
나는 많은 다른 방법을 시도했지만 아무도 효과가 없었습니다. 이 작업을 수행 할 수있는 '정식'방식이 있습니까? 나는 이런 종류의 문제와 관련하여 사람들이 -[NSWindow frameForContentRect:]
에 대해 이야기하는 것을 보았지만, 그것이 어떻게 필요한지 잘 이해할 수 없다.
어쩌면 내가 완전히 잘못된 방향으로 가고 있을지도 모르지만 나는 희망하지 않습니다. 이것이 가능한 것처럼 보입니다. 올바른 장소에서 올바른 것을 얻는 것입니다. 불행히도 GUI 프로그래밍은 나에게 장점이 아닙니다. 사람들이 갖고있는 아이디어 나 해결책을 고맙게 생각합니다.
감사합니다.
편집 :이 부분은 표시된 대답과 일부 다른 이유로 인해 해결되었습니다. 지우기 NSView에는 자동 크기 지정 마스크가 없었기 때문에이 옵션을 모든 방향으로 확장하도록 설정했습니다. 이로 인해 크기 조정 문제가 해결되었습니다. 또한 필요한 높이를 계산할 때 사용한 방법이 완전히 정확하지 않고 몇 가지 문제가있었습니다.
제공된 대답을 통해 필요한 높이를 찾는 방법은 경우에 따라 적절하지만 측정 할 수있는 '루트'항목이 없습니다. 이것은 고려해야 할 사항입니다.
네, 좋습니다. 나는 거의 모든 것을 작동 시켰습니다. 주요 문제는 이제 NSOutlineView 변경이 발생하기 전에 윈도우가 프레임을 변경한다는 것입니다. 이상적으로는 동기화가 필요합니다. 이것이 어떻게 이루어질 수있는 아이디어가 있습니까? – danpalmer
'setFrame : display : animate :'호출을 'dispatch_async'하여 거의 동기화 시켰습니다. 작은 변화가 있으면 효과가 있습니다. – danpalmer
확인. 현재 잘 작동하고 있지만 애니메이션이 제대로 시간을 맞추지 못해 일부 그래픽 지터가 있습니다. 이 일을 막기 위해 내가 할 수있는 것에 대해 조언 해 주시겠습니까? – danpalmer