我试图在UIScrollView内容的底部设置UIView,这样做是为了将 View 的位置设置为scrollview的contentsize高度。但是我的scrollview是UIWebView的 subview ,因此,在加载图像时,contentsize的高度会发生变化,并且应该在scrollview底部的 View 最终会在中间...

因此,我正在寻找一种当scrollview的contentsize更改时得到通知的方法。我试图对其进行子类化,并更改contentsize的设置方法以发送NSNotification:

@implementation UIScrollView (Height)

-(void)setContentSize:(CGSize)contentSize
{
    _contentSize=contentSize;
    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"scrollViewContentSizeChanged" object:nil]];
}

@end

但是在编译时我得到错误提示:



知道应该如何将 setter 归类吗?

谢谢 !

最佳答案

也许您可以使用键值观察(KVO)来检测内容大小的变化。我没有尝试过,但是代码应如下所示:

static int kObservingContentSizeChangesContext;

- (void)startObservingContentSizeChangesInWebView:(UIWebView *)webView {
    [webView.scrollView addObserver:self forKeyPath:@"contentSize" options:0 context:&kObservingContentSizeChangesContext];
}

- (void)stopObservingContentSizeChangesInWebView:(UIWebView *)webView {
    [webView.scrollView removeObserver:self forKeyPath:@"contentSize" context:&kObservingContentSizeChangesContext];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if (context == &kObservingContentSizeChangesContext) {
        UIScrollView *scrollView = object;
        NSLog(@"%@ contentSize changed to %@", scrollView, NSStringFromCGSize(scrollView.contentSize));
    } else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

如果这不起作用,则可能需要处理setContentSize:方法。方法困惑使您的替换方法可以调用原始方法,这是将新的内容大小传递到滚动 View 所需的操作。

您可以在此处阅读有关方法泛滥的更多信息:http://www.mikeash.com/pyblog/friday-qa-2010-01-29-method-replacement-for-fun-and-profit.html

我认为这是最流行的代码:https://github.com/rentzsch/jrswizzle

关于ios - 检测对UIWebView滚动 View 的contentSize的更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13295762/

10-11 11:19