我试图在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/