Ich habe eine ziemlich einfache MainWindow.xib
mit einer Seitenleiste im Source-List-Stil. Ich habe sie erstellt, indem ich die Vorlage Source List in das Fenster gezogen habe, das bereits zwei NSTableCellView
s enthält: HeaderCell
und DataCell
.
Letzteres besteht aus einem Symbol (mit NSImageView
) und einem Label (NSTextField
). Stattdessen möchte ich das Label und ein weiteres, kleineres Label darunter haben. In IB sieht das wie folgt aus:
Wenn ich mich nur auf DataCell
konzentriere, wird es entsprechend hervorgehoben:
Die Sache ist, wenn ich das Programm tatsächlich ausführe, sieht es überhaupt nicht wie die Vorlage aus:
Bemerken Sie, wie die beiden NSTextField
s einfach zu einem zusammengequetscht werden. Meine Vorstellung war, dass viewbasierte NSOutlineView
s (und auch viewbasierte NSTableView
s) in IB als Vorlage entworfen sein sollen. Stattdessen scheinen die Abmessungen aus der Vorlage größtenteils ignoriert zu werden.
Hier ist der Code, der die Werte der Ansicht 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 versucht, GetRowHeight
zu überschreiben, aber das scheint das Problem nicht zu lösen (es macht mehr Platz, aber lässt die Ansichten trotzdem nicht richtig verteilen), noch scheint es notwendig zu sein.
Ich habe auch mit verschiedenen Einstellungen wie Automatische Größenanpassung
, Unteransichten automatisch anpassen
usw. in IB gespielt, aber das scheint keine intuitiven Ergebnisse zu bringen, und auch das scheint nicht notwendig zu sein - die Ansicht wie sie in IB präsentiert wird, ist genau das, was ich will, nur mit etwas längeren Labels in der Praxis.
Ich habe dies noch nicht in AutoLayout umgewandelt.
Welchen offensichtlichen Schritt übersehe ich?
Weitere Informationen, die wahrscheinlich keine Rolle spielen: 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 die App-Sandbox aktiviert.