我有一个相当基本MainWindow.xib的源列表样式侧边栏。我通过将Source List模板拖到已经包含两个NSTableCellViews:HeaderCell和DataCell.
后者由一个图标(使用NSImageView)和一个标签(NSTextField)组成。相反,我想要标签和下面的另一个较小的标签。在 IB 中,这看起来如下:

如果我只关注DataCell,它会相应地突出显示:

事情是,实际运行程序,它看起来不像模板:

注意这两个NSTextFields 是如何被撞成一体的。我的理解是基于视图的NSOutlineViews(和基于视图的NSTableViews,就此而言)应该被设计为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,但这似乎并没有解决问题(它腾出了更多空间,但仍然没有让视图正确分布),也似乎没有必要。
我也尝试过在 IB 中使用各种Autosizing,Autoresizes Subviews等切换,但这似乎并没有产生直观的结果,而且似乎没有必要 - IB 中呈现的视图正是我想要的,只是在实践中使用稍长的标签。
我还没有尝试将其转换为 AutoLayout。
我错过了什么明显的步骤?
一些可能没有影响的更多信息:这是一个带有 Xcode 5.0、MacOSX10.8.sdk、Xamarin Studio 4.0.12、Xamarin.Mac 4.0.12 和 Mono 3.2.3 的 Xamarin.Mac/MonoMac 项目(针对 Mono / .NET 4.0)。我还启用了应用沙盒。
