我有一个相当基本的MainWindow.xib
,其中包含一个源列表样式的侧边栏。我通过将“源列表”模板拖入窗口中创建它,其中已经包含两个NSTableCellView
: HeaderCell
和DataCell
。
后者由一个图标(使用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
,但这似乎并不能解决问题(它会增加更多空间,但仍然无法让视图正确分布),而且似乎也不必要。
我还尝试在IB中使用各种Autosizing
、Autoresizes Subviews
等开关进行调整,但这似乎并不能产生直观的结果,而且也不必要——在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)。我还启用了应用程序沙箱。