我有一个相当基本MainWindow.xib
的源列表样式侧边栏。我通过将Source List模板拖到已经包含两个NSTableCellView
s:HeaderCell
和DataCell
.
后者由一个图标(使用NSImageView
)和一个标签(NSTextField
)组成。相反,我想要标签和下面的另一个较小的标签。在 IB 中,这看起来如下:
如果我只关注DataCell
,它会相应地突出显示:
事情是,实际运行程序,它看起来不像模板:
注意这两个NSTextField
s 是如何被撞成一体的。我的理解是基于视图的NSOutlineView
s(和基于视图的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
,但这似乎并没有解决问题(它腾出了更多空间,但仍然没有让视图正确分布),也似乎没有必要。
我也尝试过在 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)。我还启用了应用沙盒。