#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 делать то, что вы хотите.
Однако это также изменит координаты всего, что находится внутри вашего представления.