Как ограничить NSSplitView? - PullRequest
       23

Как ограничить NSSplitView?

4 голосов
/ 25 февраля 2012

Привет. Я пытаюсь ограничить максимальную и минимальную координаты NSSplitView. Я создал контроллер представления и назначил его в качестве делегата NSSplitView. Методы делегата вызывают, однако, разделенное представление не ограничивается той позицией, которую я пытаюсь установить. Любые предложения относительно того, что я делаю неправильно?

- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex 
{
    NSLog(@"Constrain min");

    if (proposedMinimumPosition < 75) 
    {
        proposedMinimumPosition = 75;
    }

    return proposedMinimumPosition;
}

- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMax ofSubviewAt:(NSInteger)dividerIndex
{
    NSLog(@"Constrain max");

    if (proposedMax > 200) 
    {
        proposedMax = 200;
    }

    return proposedMax ;
}

Ответы [ 2 ]

1 голос
/ 25 апреля 2015

Предположим, вы хотите, чтобы каждая из двух секций вертикального разделителя имела высоту не менее 70,0, а затем то, что вы будете делать:

- (CGFloat)     splitView:(NSSplitView *)splitView
   constrainMinCoordinate:(CGFloat)proposedMin
              ofSubviewAt:(NSInteger)dividerIndex
{
    return 70.0;
}

- (CGFloat)     splitView:(NSSplitView *)splitView
   constrainMaxCoordinate:(CGFloat)proposedMin
              ofSubviewAt:(NSInteger)dividerIndex
{
    return splitView.frame.size.height - 70.0;
}

Причина вычитания заключается в динамическом учете любого изменения размера (например, с помощью автоматического размещения) всего экземпляра NSplitView. Если вы работаете с горизонтальным, то вам нужно рассчитать против .width вместо .height. Если у вас более двух подпредставлений, идею можно расширить, посмотрев на dividerIndex и применив значения по своему усмотрению.

0 голосов
/ 25 февраля 2012

Я решил проблему, сделав это.

- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview 
{
    return NO;
}
...