我有一個相當基本的MainWindow.xib
與源列表式邊欄。我通過將源列表模板拖到已經包含兩個NSTableCellView
s:HeaderCell
和DataCell
的窗口中來創建它。NSTableCellViews應該如何佈局?
後者由一個圖標(使用NSImageView
)和一個標籤(NSTextField
)組成。相反,我需要標籤和另一個較小的標籤。在IB,這看起來如下:
如果我只專注於DataCell
,其相應的亮點:
事情是,實際運行的程序,它看起來一點也不像模板:
請注意這兩個NSTextField
只是一起被粉碎成一個。我的理解是,基於視圖的NSOutlineView
(和基於視圖的NSTableView
s)應該被設計爲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呢。
我錯過了什麼明顯的步驟?
更多信息可能沒有什麼區別:這是一個Xamarin.Mac/MonoMac項目,包含Xcode 5.0,MacOSX10.8.sdk,Xamarin Studio 4.0.12,Xamarin.Mac 4.0.12和Mono 3.2.3(針對Mono/.NET 4.0)。我還啓用了App Sandboxing。