第一个解决方案(下面)仅适用于iOS 7,而不适用于iOS 6和iOS 5.因此,当使用-(void)scrollViewDidScroll:(UIScrollView *)scrollView
进行任何滚动运动时,另一种方法是更新滚动视图的内容大小iOS 7,6和5。
在-(void)scrollViewDidScroll:(UIScrollView *)scrollView
内,我记录了最高内容大小
if (_currentWebPageContentHeight < [[_webView scrollView] contentSize].height) {
_currentWebPageContentHeight = [[_webView scrollView] contentSize].height;
}
每当加载另一个网页或重新加载当前页面时,将_currentWebPageContentHeight
恢复为默认高度(网页视图的高度)。
我找到了解决办法,但不知道为什么会有效。略微更改滚动视图的contentInset
会强制将contentSize
刷新为当前版本。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
/// Load image data in async manner from photo chosen in album or taken by camera
// ....
/// Refresh the contentSize of UIScrollView inside UIWebView
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[_galleryPopoverController dismissPopoverAnimated:YES];
/// A patch to force refresh the contentSize of scrollView, 0.01 is chosen to give unnoticeable layout change to user
[[webView scrollView] setContentInset:UIEdgeInsetsMake(0, 0, 0.01, 0)]; // UIEdgeInsetsMake(top, left, bottom, right)
} else {
[picker dismissViewControllerAnimated:YES completion:^{
/// A patch to force refresh the contentSize of scrollView, 0.01 is chosen to give unnoticeable layout change to user
[[webView scrollView] setContentInset:UIEdgeInsetsMake(0, 0, 0.01, 0)]; // UIEdgeInsetsMake(top, left, bottom, right)
}];
}
}
使用Xcode 5,iOS 7,iPhone 5,没有nib文件,没有手动添加自动布局约束。
在一个项目中,有一个UIWebView,左下角有一个按钮,该按钮用于将照片从iPhone的相册或相机上传到测试网站。
当我尝试从相册上传照片时单击Choose
按钮时,方法-(void)imagePickerController:didFinishPickingMediaWithInfo:
被调用,当此方法完成时,UIImagePickerController将随动画消失,并且会加载所选的照片。但是UIWebView的UIScrollView子视图虽然可以向下滚动到当前网页的末尾,但是会继续弹回到UIWebView的可见框架(origin.x = 0,origin.y = 64,size.width = 320,size.height) = 568 - 64),也看不到垂直滚动指示器。
UIWebView中嵌入的UIScrollView的框架/边界是正确的,我在以下语句的^ {}中检查它:
// At the end of the -(void)imagePickerController:didFinishPickingMediaWithInfo:
[imagePickerControllerInstance dismissViewControllerAnimated:YES completion:^{}];
我也强迫这些值是正确的。但不会改变上述意外行为。
[[webView scrollView] setShowsVerticalScrollIndicator:YES];
[[webView scrollView] setScrollIndicatorInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[webView scrollView] setContentSize:(CGSizeMake([[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height - 64))];
关于上面使用的数字:
任何人都可以解决这个问题?谢谢!
答案 0 :(得分:2)
您应该setContentSize:
到实际的内容大小,而不是可见的帧大小。那就是你的内容是1000px高,您应该setContentSize:CGSizeMake(width, 1000)
。这样你告诉UIScrollView
它应滚动显示1000px高内容。如果将UIScrollView
的内容大小设置为等于其框架,则不会执行滚动,也不会显示滚动指示符(仅限弹跳效果)。