2009-08-08 3 views
2

У меня есть NSSplitView с NSScrollView в нижнем представлении. Проблема в том, что когда я рушится, а затем снова открываю (не сворачиваю) вид снизу, высота представления прокрутки выходит за пределы этого нижнего представления, поэтому верхняя часть окна scoll обрезается. У меня есть вид прокрутки, и мой режим разделения настроен на автоматизацию во всех направлениях в IB. Нужно ли настраивать высоту этого вида прокрутки после развала или я неправильно устанавливаю свойство изменения размера или что-то еще? Ниже представлено изображение до и после того, как выглядит обрезка.Как исправить высоту моего представления после свертывания NSSplitView?

Перед Collapse:

alt text

После распада и повторного открытия (обратите внимание на полосу прокрутки в виде снизу обрезается)

alt text

ответ

0

У меня такая же проблема. Исправлено с использованием разделенных видов BWToolkit, которые позволяют вам определять максимальную и минимальную высоту для каждого вида.

+0

Да, это на самом деле что я закончил делать. На самом деле в BWToolkit есть несколько ошибок, но он исправлен в версии 1.2.5 – Austin

4

Проблема проистекает из того факта, что правила авторезистентности какао работают путем масштабирования дельт от предыдущего состояния до текущего состояния. Если какой-либо из полей будет равен 0, они никогда не будут масштабироваться, так как представление растет из-за многокалиберного характера масштабирования.

Типичный подход к работе с этим заключается в использовании методов делегирования NSSplitView, чтобы предотвратить разделение вида на мелкие, а затем закрыть его, что внутренне сохраняет свернутое представление с минимальным размером.

Вот ссылка на split view documentation.

Кроме того, если вы думаете об опыте пользователя, ваши взгляды, вероятно, выглядят очень ужасно, когда они имеют размер ниже определенной точки - виды, вероятно, начинают перекрываться и становятся слишком маленькими, чтобы показывать их содержимое. Добавление этого эффекта сбрасывания-обрушения затрагивает обе проблемы.

Если вы хотите увидеть пример этого, Mail.app от Mac OS X закроет его закрытое сообщение встроенного сообщения, когда оно достигнет определенной высоты. Вы должны подражать этому поведению.

0

Вы можете «сбросить» вещи через NSUserDefaults, возможно .. Есть ключи для таких вещей, как NSSplitView Subview Frames и т.д., к которому вы можете назначить координаты, а-ля 0.000000, 0.000000, 0.000000, 720.000000, NO

0

В то время как Джон Хесс могли бы описать проблему (а как только ширина подвидности станет 0, информация об автоизображении теряется для элементов автоматической ширины), решение на самом деле не предоставляется для всех случаев. Ограничение ширины не помогло в моем случае, так как подзапрос может быть свернут.

мне удалось достичь приемлемого решения, путем реализации метода -splitviewWillResizeSubviews SPLITVIEW делегата: поддерживать минимальную ширину, установив подвид на скрытое вместо того, сокращается до нуля:

- (void)splitViewWillResizeSubviews:(NSNotification *)notification { 
     NSUInteger divider = [[[notification userInfo] valueForKey:@"NSSplitViewDividerIndex"] intValue]; 
     NSView *subview = nil; 
     if(divider == SPLITVIEW_DIVIDER_SIDEBAR) { 
      subview = (NSView*)[self.splitView.subviews objectAtIndex:SPLITVIEW_SIDEBAR_INDEX]; 
     } 
     if(subview) { 
      if(subview.frame.size.width < SPLITVIEW_MINIMUM_SIDEBAR_WIDTH) { 
       CGRect correctedFrame = subview.frame; 
       correctedFrame.size.width = SPLITVIEW_MINIMUM_SIDEBAR_WIDTH; 
       subview.frame = correctedFrame; 
       subview.hidden = YES; 
      } else { 
       subview.hidden = NO; 
      } 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^