首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IKImageView和滚动条

IKImageView和滚动条
EN

Stack Overflow用户
提问于 2010-01-14 06:01:41
回答 1查看 2.8K关注 0票数 3

我正在尝试使用苹果(http://developer.apple.com/mac/library/samplecode/IKImageViewDemo/index.html)提供的IKImageViewDemo,并尝试在其上添加滚动条。我试过两种方法:

1)在ScrollView中嵌入IKImageView。这有各种奇怪的效果,比如图像不再位于它应该在的位置,滚动条似乎在一个固定的位置,无论窗口有多大(所以我可以缩小窗口并丢失滚动条,即使滚动视图被设置为随窗口调整大小)

2)我在openImageURL方法的代码中添加了_imageView setHasHorizontalScrollers: YES。这似乎没有起到任何作用。

我是不是漏掉了什么明显的东西?

另外:为什么

代码语言:javascript
复制
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);

给我:

代码语言:javascript
复制
scrollbar? H 0 V 0 hide 0
scrollbar? H 0 V 0 hide 0

另外:

同样,为什么:

代码语言:javascript
复制
 BOOL b = _imageView.autohidesScrollers = YES;
 NSLog (@"b %d scrollers %d", b, _imageView.autohidesScrollers);

是否打印b1滚动条0?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-25 04:42:18

在IKImageViewDemo中,您可能会注意到的一件事是,图像被缩放以适应windowDidResize:方法([_imageView zoomImageToFit: self])。

在NSScrollView中嵌入IKImageView是正确的做法。为了让滚动条在调整窗口大小时跟随窗口,您需要在界面生成器中调整弹簧和struts (==自动调整大小掩码)。

附录:正如你已经注意到的,MacOSX10.6中有一个错误,导致它不能正常工作。您可以通过将NSScrollView子类化来解决此问题,如下所示:

代码语言:javascript
复制
@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版本。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2060614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档