【发布时间】:2013-09-28 13:53:16
【问题描述】:
我有一个相当基本的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。
我错过了什么明显的步骤?
更多信息可能不会产生影响:这是一个 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)。我还启用了应用沙盒。
【问题讨论】:
标签: xib nstextfield xcode5 monomac xamarin-studio