Как я устанавливаю позицию по умолчанию для представления NSScroll?

#objective-c #cocoa #xcode #nsview #nsscrollview

#objective-c #cocoa #xcode #nsview #nsscrollview

Вопрос:

У меня проблема с NSScrollView в моем приложении, потому что оно всегда начинается в нижней части окна. Как можно заставить его начинаться сверху?

Комментарии:

1. Вы хотите прокручивать NSScrollView программно?

Ответ №1:

Попробуйте что-то вроде этого:

 NSPoint pointToScrollTo = NSMakePoint (  ,  );  // Any point you like.
[[scrollView contentView] scrollToPoint: pointToScrollTo];
[scrollView reflectScrolledClipView: [scrollView contentView]];
  

Комментарии:

1. Это также хорошо работает в swift, немного адаптировано: ScrollView!.documentView = toolsView var scrollLocation = NSPoint(x: 0, y: toolsView.frame.size.height — просмотр левой прокрутки! .contentView.frame.size.height) Просмотр левой прокрутки! .contentView.scrollToPoint (расположение прокрутки) leftScrollView! .reflectScrolledClipView (просмотр левой прокрутки! .contentView)

Ответ №2:

Решение приведено в руководстве по программированию Scroll View, прокручивая до определенного местоположения. Вы можете использовать -[NSView scrollPoint:] , чтобы задать начало просмотра клипа.

 // A controller which has an outlet to the scroll view
- (void)awakeFromNib {

    // Not checking for flipped document view. See sample code.
    // New origin should be 
    // (documentView.frame.y   documentView.frame.height) - clipView.bounds.height
    NSPoint newOrigin = NSMakePoint(0, NSMaxY([[scrollView documentView] frame]) -
                                           [[scrollView contentView] bounds].size.height);
    [[scrollView documentView] scrollPoint:newOrigin];
}
  

Комментарии:

1. У меня это работает, но: `NSPoint newOrigin = NSMakePoint(0, NSMaxY([[рамка ScrollView documentView]) — [[Границы содержимого ScrollView]].размер.высота); [[ScrollView documentView] scrollPoint: newOrigin];`

Ответ №3:

Если у вас есть пользовательский подкласс NSView внутри NSScrollView, попробуйте переопределить isFlipped :

 - (BOOL)isFlipped
{
    return YES;
}
  

Это помещает начало представления вверху, что должно заставить NSScrollView делать то, что вы хотите.

Однако это также изменит координаты всего, что находится внутри вашего представления.