2

我正在尝试禁用 UIWebView 的滚动,而我发现的唯一方法是使用这种方式:

#import <objc/runtime.h>

id scroller = [[Webview subviews] lastObject];
int count;
Method *method = class_copyMethodList([scroller class], &count);
int i;
for (i=0; i<count; i++) {
    if (strcmp(method_getName(method[i]), "setScrollingEnabled:") == 0)
        break;
}
IMP test = method_getImplementation(method[i]);
test(scroller, @selector(setScrollingEnabled:), NO);

这是否被认为是使用 iPhone SDK 的非法方式?这会导致我的申请被 App Store 拒绝吗?

4

7 回答 7

4

这样做会不会简单得多:

if ([scroller respondsToSelector: @selector(setScrollingEnabled:)]) [scroller setScrollingEnabled: NO]

这避免了他们可能会扫描您的二进制文件的任何潜在方法调用(不确定他们如何验证“合法性”)。它仍然不是 100% 洁净,但绝对更安全。

于 2009-09-07T10:45:34.037 回答
2

如果该方法不在 .h 文件中,则它是私有的。这是一个非常简单的规则。您需要为简单的消息发送执行任何运行时“恶作剧”这一事实应该说明问题。

于 2010-05-19T17:17:09.917 回答
2

我刚刚因为使用 setScrollingEnabled 而被我的应用程序拒绝,所以请注意!

他们的消息:“您的应用程序中包含的非公共 API 是 setScrollingEnabled”

于 2010-05-19T17:11:48.167 回答
1

是的,这被认为是非法的。我实际上收到了一个“警告”,说 setSCrollingEnabled 是私有框架的一部分。他们批准了该应用程序,但说我需要删除此调用,以便我提交下一次更新。

于 2010-01-06T04:29:59.650 回答
1

这行得通——</p>

UIScrollView *scrollView = [[myWebView subviews] lastObject];
scrollView.scrollEnabled = FALSE;

这解决了这个问题,同时还保持链接可点击,它嵌入在可滚动中的任何滚动视图,并且只使用公共 API。

我发现如果嵌入在 a 中UIScrollView并且设置userInteractionEnabled为 false 阻止 webView 中的链接可点击,javascript 解决方案会阻止 WebViews 正常工作。

于 2010-06-23T17:44:21.630 回答
0

这可能是有问题的,但只要在找不到方法时/如果您有后备行为,就不会成为拒绝的原因。已经过去了更严重的滥用行为。

于 2009-09-07T07:13:37.050 回答
0

好吧,也许他们认为您以另一种方式做到了,例如获取屏幕外 UIWebView 的内容并将其显示在普通的 UIIMage 视图中,或者将页面的 HTML 内容限制其大小并将其呈现在 UIWebView 中。

于 2009-09-07T07:48:29.337 回答