Disable Scroll on a UIWebView allowed?

2019-01-16 04:36发布

I have to show a web article with a UITableView under the article.

The only option I found was to display the article in a UIWebView in the tableView header.

In order to do that I have to get the height of the webView content and I have to disable scrolling for the webView.

I found two solutions to disable scrolling:

for (id subview in webView.subviews)
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        ((UIScrollView *)subview).scrollEnabled=NO;

or in JavaScript:

<script type="text/javascript">
touchMove = function(event) {
    event.preventDefault();
}

I heard that the first solution is forbidden by Apple but I don't have any proof of it. Will my application be rejected by using this solution? If so, can I use the second solution without being rejected?

18条回答
霸刀☆藐视天下
2楼-- · 2019-01-16 05:08

Starting with iOS5 we have direct access to the scrollview of the UIWebView.
You can disable scrolling and bounces like this:

webView.scrollView.scrollEnabled = NO; 
webView.scrollView.bounces = NO;
查看更多
我只想做你的唯一
3楼-- · 2019-01-16 05:08

[[myWebView scrollView] setBounces:NO];

查看更多
啃猪蹄的小仙女
4楼-- · 2019-01-16 05:12

I don't think the first option is forbidden by Apple.

You could try

[[[Webview subviews] lastObject] setScrollingEnabled:NO];

If you don't want any links to work in your UIWebView, you can also do

[myWebView setUserInteractionEnabled:NO];
查看更多
疯言疯语
5楼-- · 2019-01-16 05:12

I needed to disable scrolling because dismissing a custom keyboard really messed up scrolling with the webView. Nothing else worked and I resorted to something like this:

-(void)viewDidLoad{
  [super viewDidLoad];
  [self.webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
  self.webView.scrollView.showsVerticalScrollIndicator = NO;
}  

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if (!CGPointEqualToPoint(self.webView.scrollView.contentOffset, CGPointZero)){
        self.contentOffset = CGPointZero;
    }
}
查看更多
虎瘦雄心在
6楼-- · 2019-01-16 05:15

I placed some UIWebViews inside a UIScrollView and it wasn't scrolling for me, unless I disable the user interaction on the webviews (even with the [[webview scrollview] setScrollEnabled:NO]). So I placed the UIWebViews inside a UIView and that worked for me but then the interactive links or divs in my HTML inside the UIWebView were not working anymore.

The only thing that worked for me is to keep the UIWebView inside the UIScrollView so the HTML interactions work but the UIScrolling does not.

I then created a custom delegate for the webviews to listen for window.open("http:/customEvent") that is called from the HTML contained in the webview. I also added a JavaScript swipe detection that will fire up my custom event.

When the webview delegate receives this, I pass a notification to a controller which then dynamically scrolls my UIScrollView. Obviously I had to build a logic to monitor and scroll to the next or previous page. Not the prettiest solution but It's working for me.

查看更多
三岁会撩人
7楼-- · 2019-01-16 05:16

The first is rejected by Apple. It happened to me just this morning.

查看更多
登录 后发表回答