2013-06-17 2 views
3

У меня есть интерфейс, разработанный, как показано ниже, с автоматической компоновкой в ​​XIB.Как я могу одушевить NSSplitView с автоматическим расположением

[Left Pane]-[Center Pane]-[Right Pane] 
[   Bottom Pane    ] 

В настоящее время он поддерживает максимум и минимум ширина/высоты для каждого из панелей, а также рушатся подвиды либо двойным щелчком по разделителю или с NSSegmentedControl. Теперь я хотел бы оживить коллапс, возникающий, когда пользователь переключает NSSegmentedControl. Я видел много примеров настройки анимации с помощью NSSplitView для свертывания подзадача, но ни один из них не выполняет его с помощью Auto Layout.

Я попытался выполнить демонстрационный пример для анимационных ограничений, представленных в видео WWDC 2012 в Auto Layout Demo. Но поскольку это мой первый раз, когда я включаю Auto Layout, я еще не понял, как это сделать.

Ниже то, что я в настоящее время

NSArray *constraints = [self.leftPane constraints]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d", NSLayoutAttributeWidth]; 
NSArray *filteredArray = [constraints filteredArrayUsingPredicate:predicate]; 

[self.leftPane removeConstraints:filteredArray]; 

[self.lcrSplitView layoutSubtreeIfNeeded]; 

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { 
    [context setAllowsImplicitAnimation:YES]; 

    NSLayoutConstraint *newWidth = [NSLayoutConstraint constraintWithItem:self.leftPane 
                   attribute:NSLayoutAttributeWidth 
                   relatedBy:NSLayoutRelationEqual 
                    toItem:nil 
                   attribute:NSLayoutAttributeNotAnAttribute 
                   multiplier:0.0f 
                   constant:0.0f]; 

    [self.leftPane addConstraint:newWidth]; 


    [self.lcrSplitView layoutSubtreeIfNeeded]; 
} completionHandler:^{}]; 
+0

Вы когда-нибудь это понимали? У меня есть такая же история, как и вы, вплоть до того, что я только что последовал за этой демонстрацией WWDC 2012. Единственное, что отличается от нас, это то, что у меня на самом деле есть верхняя панель в дополнение к левой, центральной, правой и нижней панелям. – ArtOfWarfare

+0

У меня нет решения, которое еще оживляет, но это может представлять интерес для других: http://stackoverflow.com/a/20027805/901641 – ArtOfWarfare

+0

@ArtOfWarfare, я в конечном итоге получил что-то работающее, но оно было очень запутанным и был склонен к ошибкам. По какой-то причине это отлично работает на Mountain Lion, но не на Mavericks (где это было бы крайне рывком). Таким образом, я закончил тем, что сломал его и создал свой собственный подкласс NSViewController, который содержал 4 подзадача и катил мой собственный настраиваемый NSSplitView. Я также отошел от автоматического макета для этого проекта и просто использовал весну и стойки во многом из-за этой проблемы, вызвав так много головной боли. Я знаю, что мне больно слышать, но я рекомендую просто создать собственную реализацию с разделенным представлением. ... – xizor

ответ

0

Для тех, кто таргетирования 10.11 El Capitan, это сделал трюк для меня.

splitViewItem.collapsed = YES; 
Смежные вопросы