Mam NSTableView oparty na widoku z NSTableCellView w widoku tabeli konfiguracji graficznie za pomocą konstruktora interfejsów w najnowszej wersji Xcode na 10.8.2.Niezadowalające ograniczenia z NSTableView podczas wywoływania reloadData
Kiedy zadzwonić -reloadData na NSTableView, to wywala z:
Unable to simultaneously satisfy constraints:
(
"<NSAutoresizingMaskLayoutConstraint:0x105cb8bf0 h=--& v=--& V:[NSTableRowView:0x105ca7020(0)]>",
"<NSAutoresizingMaskLayoutConstraint:0x10596aa30 h=--& v=-&- V:[GroupTableRowView]-(2)-| (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020)>",
"<NSAutoresizingMaskLayoutConstraint:0x1058d9770 h=--& v=-&- V:|-(1)-[GroupTableRowView] (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020)>"
)
Will attempt to recover by breaking constraint
<NSAutoresizingMaskLayoutConstraint:0x10596aa30 h=--& v=-&- V:[GroupTableRowView]-(2)-| (Names: GroupTableRowView:0x100185860, '|':NSTableRowView:0x105ca7020)>
nie mogę wyłączyć auto-rozmiaru tłumaczenie maski na dowolny z widokiem zaangażowanych jako swoich ograniczeń są zarządzane przez NSTableView. Jest oczywiste, że ograniczenia są w konflikcie, ponieważ NSTableRowView nie może mieć 0 wysokości, a jednocześnie spełnia pozostałe dwa ograniczenia w GroupTableRowView, które określają obowiązkowe dopełnienie między superview (widok wiersza?). Nie jestem pewien, jak rozwiązać ten problem, wszelkie spostrzeżenia będą mile widziane. Dzięki!
Aktualizacja: Znalazłem obejście. Problem polega na tym, że z jakiegoś powodu NSTableRowView był wysyłany o rozmiarze ramki {0, 0}
podczas wywoływania -reloadData w widoku tabeli. Przeanalizowałem -setFrameSize:
w podklasie NSTableRowView i przekazuję komunikat tylko do łańcucha responderów, gdy rozmiar nie jest {0,0}
.
- (void)setFrameSize:(NSSize)newSize
{
if (!NSEqualSizes(newSize, NSZeroSize))
[super setFrameSize:newSize];
}
Aby użyć podklasy realizacji -tableView:rowViewForRow: sposób NSTableViewDelegate do powrotu wystąpienie niestandardowego podklasy.
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
{
id rowView = [[GroupTableRowView alloc] init];
// configure any custom properties
return rowView;
}
Jeśli widok tabeli jest zaprojektowany w całości w IB, można po prostu przeciągnij nowy NSView do widoku tabeli i ustaw jego własnej klasy do podklasy NSTableRowView i zmienić jego interfejs użytkownika Element Identifier do NSTableViewRowViewKey
Bump. Wystąpił podobny problem podczas korzystania z widoków tabel opartych na widoku. Czy zrobiłeś postęp w swoim problemie? –
Zaktualizowałem moje pytanie z obejściem. Nadal szukam, dlaczego NSTableCellView jest wysyłany '{0,0}', ale nie mogę tego odtworzyć w aplikacji demonstracyjnej do przesłania z raportem o błędzie do Apple. – Andrew
@Andrew Myślę, że to jest rzeczywiście rozwiązanie, dzięki za to! – NSAddict