有谁知道是否可以删除放置在UIWebView窗口上的阴影?
示例:http://uploadingit.com/files/1173105_olub5/shadow.png
如果它可能你怎么做?
谢谢
jod*_*odm 71
这是"Nikolai Krill"解决方案的更清洁的替代品.这只隐藏UIWebView中的UIImageViews而不是UIWebBrowserView.
for (UIView *view in [[[webView subviews] objectAtIndex:0] subviews]) {
if ([view isKindOfClass:[UIImageView class]]) view.hidden = YES;
}
Run Code Online (Sandbox Code Playgroud)
谢谢詹姆斯
den*_*342 14
小的for循环是非常危险的,因为如果苹果改变子视图的数量它会崩溃.
这样一来,当事情发生变化时,它至少不会崩溃:
if ([[webView subviews] count] > 0)
{
for (UIView* shadowView in [[[webView subviews] objectAtIndex:0] subviews])
{
[shadowView setHidden:YES];
}
// unhide the last view so it is visible again because it has the content
[[[[[webView subviews] objectAtIndex:0] subviews] lastObject] setHidden:NO];
}
Run Code Online (Sandbox Code Playgroud)
选择器setAllowsRubberBanding有一个私有方法:它接受BOOL值.如果传递否,您将无法滚动内容区域顶部或底部的Web视图,但仍然可以正常滚动Web视图.不幸的是,这种方法是私有的,如果您使用它,您的应用可能不会被允许进入商店.
但是,您可以使用Objective-C运行时的动态特性尝试提取方法实现并将其绑定到您创建的不同选择器.
但是,该方法是私有的,并且可能在OS的未来版本中不再存在.如果你还想尝试,这里有一些示例代码将提取setAllowsRubberBanding:方法实现并为你调用它.
static inline void ShhhDoNotTellAppleAboutThis (UIWebView *webview)
{
const char *hax3d = "frgNyybjfEhooreOnaqvat";
char appleSelName[24];
for (int i = 0; i < 22; ++i)
{
char c = hax3d[i];
appleSelName[i] = (c >= 'a' && c <= 'z') ? ((c - 'a' + 13) % 26) + 'a' : ((c - 'A' + 13) % 26) + 'A';
}
appleSelName[22] = ':';
appleSelName[23] = 0;
SEL appleSEL = sel_getUid(appleSelName);
UIScrollView *scrollView = (UIScrollView *)[webview.subviews objectAtIndex:0];
Class cls = [scrollView class];
if (class_respondsToSelector(cls, appleSEL) == NO)
{
return;
}
IMP func = class_getMethodImplementation(cls, appleSEL);
func(scrollView, appleSEL, NO);
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您选择使用此代码将应用程序提交到AppStore,这可能仍会被Apple的静态分析器捕获.
这是一个Swift函数,它消除了iOS 9中UIWebView中的阴影。它比我在SO上看到的任何替代方法都更安全,因为其中的所有内容都在Apple文档中,并且专门更改了shadow属性(与隐藏相比)整个视图或视图的其他属性)。
func removeShadow(webView: UIWebView) {
for subview:UIView in webView.scrollView.subviews {
subview.layer.shadowOpacity = 0
for subsubview in subview.subviews {
subsubview.layer.shadowOpacity = 0
}
}
}
Run Code Online (Sandbox Code Playgroud)
您始终可以访问UIView(documentation)的subviews属性。每个UIView都有一个(文档)layer属性。每个都有(文档)。CALayerCALayershadowOpacity
注意事项:
shadowOpacity为零。我查看了类属性,但没有找到任何内容,但我可以想到两种“掩盖”策略:
1.您可以使用另一个视图(Web 视图的父级)来裁剪 Web 视图边界。
2.您可以在webview之上添加另一个视图,用与背景相匹配的颜色覆盖所需的区域,您可以使用中心有透明区域的uiimage。
顺便说一句,我不喜欢表视图的标准背景:P,但更改它可能会很痛苦:P
| 归档时间: |
|
| 查看次数: |
20700 次 |
| 最近记录: |