IKImageView 和滚动条
-
20-09-2019 - |
题
我正在尝试使用苹果提供的 IKImageViewDemo (http://developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html)并且我正在尝试向其添加滚动条。我尝试过两件事:
1) 将 IKImageView 嵌入 ScrollView 中。这产生了各种奇怪的效果,比如图像不再位于它应该在的位置,并且滚动条似乎位于固定位置,无论窗口有多大(所以我可以缩小窗口并丢失滚动条,即使滚动视图设置为随窗口调整大小)
2)我添加了[_imageView setHasHorizontalScrollers:YES](垂直)到 openImageURL 方法中的代码中。这似乎什么也没做。
我错过了一些明显的东西吗?
此外:为什么
NSLog(@"scrollbar? H %d V %d hide %d",
_imageView.hasHorizontalScroller,
_imageView.hasVerticalScroller,
_imageView.autohidesScrollers);
_imageView.hasHorizontalScroller = YES;
_imageView.hasVerticalScroller = YES;
_imageView.autohidesScrollers = YES;
NSLog(@"scrollbar? H %d V %d hide %d",
_imageView.hasHorizontalScroller,
_imageView.hasVerticalScroller,
_imageView.autohidesScrollers);
给我吗:
scrollbar? H 0 V 0 hide 0
scrollbar? H 0 V 0 hide 0
?
另外:
同样为什么:
BOOL b = _imageView.autohidesScrollers = YES;
NSLog (@"b %d scrollers %d", b, _imageView.autohidesScrollers);
打印 b 1 滚动条 0 ?
解决方案
IKImageViewDemo 中可能让您感兴趣的一件事是图像被缩放以适合 windowDidResize:
方法 ([_imageView zoomImageToFit: self]
).
将 IKImageView 嵌入到 NSScrollView 中是正确的做法。为了让滚动条在调整窗口大小时跟随窗口,您需要在 Interface Builder 中调整弹簧和支柱(==自动调整大小掩码)。
附录: 正如您所注意到的,Mac OS X 10.6 中存在一个错误,导致此功能无法正常工作。您可以通过子类化 NSScrollView 来解决该问题,如下所示:
@interface IKImageClipView : NSClipView
- (NSRect)docRect;
@end
@implementation ScrollViewWorkaround
- (void)reflectScrolledClipView:(NSClipView *)cView;
{
NSView *_imageView = [self documentView];
[super reflectScrolledClipView:cView];
if ([_imageView isKindOfClass:[IKImageView class]] &&
[[self contentView] isKindOfClass:[IKImageClipView class]] &&
[[self contentView] respondsToSelector:@selector(docRect)]) {
NSSize docSize = [(IKImageClipView *)[self contentView] docRect].size;
NSSize scrollViewSize = [self contentSize];
// NSLog(@"doc %@ scrollView %@", NSStringFromSize(docSize), NSStringFromSize(scrollViewSize));
if (docSize.height > scrollViewSize.height || docSize.width > scrollViewSize.width)
((IKImageView *)_imageView).autohidesScrollers = NO;
else
((IKImageView *)_imageView).autohidesScrollers = YES;
}
}
@end
试试这个:
http://dl.dropbox.com/u/1583683/IKImageViewDemo.zip
它是带有滚动条和上述解决方法的 IKImageViewDemo 版本。