Mam dość podstawowe MainWindow.xib
z paska bocznego stylu listy źródłowej. Stworzyłem go, przeciągając szablon Źródło do szablonu w oknie, które już zawiera dwa NSTableCellView
s: HeaderCell
s: HeaderCell
i .W jaki sposób należy rozmieścić NSTableCellViews?
Ten ostatni składa się z ikony (za pomocą NSImageView
) i etykiety (NSTextField
). Zamiast tego chcę pod etykietą i inną, mniejszą etykietą. W IB, to wygląda następująco:
Jeśli skupię się tylko na DataCell
, to podkreśla odpowiednio:
Thing jest uruchomiony program, to wygląda to jak szablon:
Zauważ, jak dwa NSTextField
są po prostu rozbite w jeden. Rozumiem, że oparte na widoku NSOutlineView
s (i oparte na widoku NSTableView
s) mają być zaprojektowane jako szablon z wnętrza IB. Zamiast tego wymiary z szablonu wydają się być w większości ignorowane.
Oto kod, który ustawia wartości widoku jest ze źródła danych:
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;
}
}
}
Próbowałem nadrzędnymi GetRowHeight
, ale to nie wydaje się, aby rozwiązać ten problem (to sprawia, że więcej miejsca, ale nadal nie pozwala na prawidłowe rozpowszechnianie widoków), ani nie wydaje się konieczne.
Próbowałem także grać z różnymi Autosizing
, Autoresizes Subviews
itp. Przełącza się w IB, ale to nie wydaje się powodować intuicyjne wyniki, i znowu, nie wydaje się konieczne - widok przedstawiony w IB dokładnie to, czego chcę, tylko z nieco dłuższymi etykietami w praktyce.
Jeszcze nie próbowałem przekonwertować tego do AutoLayout.
Co oczywistego kroku mi brakuje?
Niektóre więcej informacji, które prawdopodobnie nie robi różnicy: jest to projekt Xamarin.Mac/Monoman z Xcode 5.0, MacOSX10.8.sdk, Xamarin Studio 4.0.12, 4.0.12 i Xamarin.Mac Mono 3.2.3 (targetowanie Mono/.NET 4.0). Włączyłem też funkcję Piaskownicy aplikacji.