Ich habe eine ziemlich einfache MainWindow.xib
mit einer Source-List-Stil Sidebar. Ich habe es erstellt, indem ich die Vorlage der Quellliste in das Fenster gezogen habe, das bereits zwei NSTableCellView
s enthält: HeaderCell
und DataCell
.Wie sollen NSTableCellViews angelegt werden?
Letztere besteht aus einem Symbol (mit NSImageView
) und einem Etikett (NSTextField
). Stattdessen möchte ich das Etikett und ein anderes, kleineres Etikett darunter. In IB, sieht das wie folgt aus:
Wenn ich nur DataCell
konzentrieren, hebt es dementsprechend:
Das Ding ist, tatsächlich das Programm läuft, ist es nichts, wie das aussieht Vorlage:
Beachten Sie, wie die beiden NSTextField
nur zusammen zerschlagen werden. Mein Verständnis war, dass view-basierte NSOutlineView
s (und View-basierte NSTableView
s, für die Angelegenheit) sollen als Vorlage aus IB konzipiert werden. Stattdessen scheinen die Dimensionen aus der Vorlage größtenteils ignoriert zu werden.
Hier ist der Code, der die Ansicht der Werte aus der Datenquelle setzt:
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;
}
}
}
Ich habe GetRowHeight
versucht, überschreiben, aber das scheint nicht das Problem zu lösen (es macht mehr Raum, aber noch lässt die Ansichten sich nicht richtig verteilen), noch scheint es notwendig.
Ich habe auch versucht, mit den verschiedenen Autosizing
, Autoresizes Subviews
usw. toggles in IB zu spielen, aber das scheint nicht zu intuitiven Ergebnissen zu produzieren, und wiederum scheint es nicht notwendig - die Ansicht wie in IB dargestellt ist genau das, was ich will, nur mit etwas längeren Etiketten in der Praxis.
Ich habe noch nicht versucht, dies in AutoLayout zu konvertieren.
Welchen offensichtlichen Schritt vermisse ich?
Einige weitere Informationen, die wahrscheinlich keinen Unterschied machen: Dies ist ein Xamarin.Mac/MonoMac-Projekt mit Xcode 5.0, MacOSX10.8.sdk, Xamarin Studio 4.0.12, Xamarin.Mac 4.0.12 und Mono 3.2.3 (Ausrichtung auf Mono/.NET 4.0). Ich habe auch App Sandboxing aktiviert.