나는 소스 목록 스타일의 사이드 바를 가진 상당히 기본적인 MainWindow.xib
을 가지고있다. 소스 목록 템플릿을 이미 두 개의 NSTableCellView
: HeaderCell
및 DataCell
이 포함 된 창으로 드래그하여 만들었습니다.NSTableCellViews는 어떻게 배치되어야합니까?
후자는 아이콘 (NSImageView
사용)과 레이블 (NSTextField
)로 구성됩니다. 대신 레이블 아래에 작은 레이블이 필요합니다. 다음과 같이 IB,이 보인다 :
을 그냥 DataCell
에 집중하면, 그에 따라 강조 :
것은 실제로 프로그램을 실행, 그것은이 같은 아무것도 보지 않는다 템플릿 :
두 개의 NSTextField
이 어떻게 하나가 될 수 있는지 알아보십시오. 내 이해는보기 기반의 NSOutlineView
(보기 기준으로 NSTableView
)이 IB 내에서 템플리트로 설계된 것으로 가정합니다. 대신 템플릿의 치수가 거의 무시되는 것 같습니다. 여기
public class TourSourceListDelegate : NSOutlineViewDelegate
{
public override bool IsGroupItem(NSOutlineView outlineView, MonoMac.Foundation.NSObject item)
{
return (item as TourSourceListDataSource.Item).IsHeader;
}
public override NSView GetView(NSOutlineView outlineView, NSTableColumn tableColumn, MonoMac.Foundation.NSObject item)
{
if (IsGroupItem(outlineView, item))
{
return outlineView.MakeView("HeaderCell", this);
}
else
{
var data = item as TourSourceListDataSource.Item;
var dataView = outlineView.MakeView("DataCell", this);
(dataView.Subviews[0] as NSTextField).StringValue = data.Name;
(dataView.Subviews[1] as NSTextField).StringValue = data.Date_start.ToShortDateString();
return dataView;
}
}
}
내가 GetRowHeight
을 무시하려했지만, 그 문제를 해결하지 않는 것 (그것은 더 많은 공간을 만들지 만, 여전히 은보기가 올바르게 배포되지 않도록합니다.) 또한 필요하지 않습니다.
다양한 Autosizing
, Autoresizes Subviews
등으로 재생 해봤지만 IB에서 토글되지만 직관적 인 결과는 보이지 않으며 다시는 필요하지 않습니다. IB 실제로는 약간 긴 라벨을 붙이는 것만으로도 내가 원하는 것입니다.
아직 이것을 AutoLayout으로 변환하지 않았습니다.
어떤 명백한 단계가 빠졌습니까?
아마도 차이가없는 정보가 더 있습니다. Xcode 5.0, MacOSX10.8.sdk, Xamarin Studio 4.0.12, Xamarin.Mac 4.0.12 및 Mono를 포함한 Xamarin.Mac/MonoMac 프로젝트입니다. 3.2.3 (Mono/.NET 4.0 대상). 또한 App Sandboxing을 사용하도록 설정했습니다.