私はソースリストスタイルのサイドバーを持つかなり基本的なMainWindow.xib
を持っています。 ソースリストテンプレートをウィンドウにドラッグして作成しました。このウィンドウにはすでにNSTableCellView
の2つが含まれています:HeaderCell
とDataCell
です。NSTableCellViewsはどのようにレイアウトされていますか?
後者はアイコン(NSImageView
を使用)とラベル(NSTextField
)で構成されています。代わりに、私はラベルともう1つ、小さいラベルを下にしたい。次のようにIBでは、これは見た目:
を私はちょうどDataCell
に焦点を当てる場合は、それに応じて強調表示します:
事が実際にプログラムを実行している、である、それはのように何も見えませんテンプレート:
2つのNSTextField
がちょうど1つにまとまっていることに注目してください。私の理解では、ビューベースの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
をオーバーライドしようとしたが、それは問題を解決していないようです(それはより多くの部屋になりますが、それでもは、ビューが適切に配布されないようにします)、必要ではないようです。
また、さまざまなAutosizing
,Autoresizes Subviews
などで再生しようとしましたが、IBでトグルされますが、直感的な結果が得られないように思われます。また、IBで表示されたビュー実際にはちょっと長いラベルを付けて、ちょうど私が欲しいものです。
私はこれをまだAutoLayoutに変換しようとしていません。
明らかなステップは何ですか?
おそらく違いはありません:これはXcode 5.0、MacOSX10.8.sdk、Xamarin Studio 4.0.12、Xamarin.Mac 4.0.12、およびMonoのXamarin.Mac/MonoMacプロジェクトです3.2.3(Mono/.NET 4.0を対象とする)私はApp Sandboxingも有効にしました。