Кто-нибудь знает, можно ли удалить тень, которая находится в окне UIWebView?Удалить UIWebView Shadow?
Пример: http://uploadingit.com/files/1173105_olub5/shadow.png
Если его можно, как вы это делаете?
Благодаря
Кто-нибудь знает, можно ли удалить тень, которая находится в окне UIWebView?Удалить UIWebView Shadow?
Пример: http://uploadingit.com/files/1173105_olub5/shadow.png
Если его можно, как вы это делаете?
Благодаря
Я посмотрел на свойствах класса и не нашел там ничего, но я могу думать о двух «прикрывать» стратегию:
1. Вы можете использовать другой вид (родитель из веб-просмотр), чтобы скопировать границы веб-просмотра.
2. Вы можете добавить еще один вид сверху веб-обозревателя, чтобы покрыть нужную область цветом, соответствующим фону, вы можете использовать uiimage с прозрачной областью в центре.
Кстати мне не нравится этот стандартный фон взглядов таблицы: P, но изменить это может быть боль в заднице: P
Я имел взгляд вокруг и не может видеть все, что с ним связано. Помимо маскировки его каким-либо образом или его обрезкой, я могу только подумать о том, чтобы перебрать все подвижки UIWebView (и подзапросы и т. Д.), И посмотреть, можете ли вы что-нибудь увидеть там!
Возможно, я ошибаюсь, но я думаю, что тень появляется только тогда, когда мы просматриваем веб-просмотр, не так ли? В этом случае вы хотите предотвратить прокрутку или скрыть тень? Я не знаю советов, которые скрывали бы тень. Чтобы отключить прокрутку, я бы установил значениеUserInteractionEnabled равным NO.
Существует частный метод с селектором setAllowsRubberBanding: это значение BOOL. Если прошло НЕТ, вы не сможете прокручивать веб-представление за верхнюю или нижнюю часть области содержимого, но по-прежнему сможете прокручивать веб-представление в обычном режиме. К сожалению, этот метод является частным, и ваше приложение, скорее всего, не будет разрешено в хранилище, если вы его используете.
Возможно, вы можете попробовать и извлечь реализацию метода и связать его с другим селектором, который вы создали, используя динамическую природу среды выполнения Objective-C.
Тем не менее, метод является закрытым и может больше не существовать в будущих версиях ОС. Если вы все еще хотите попробовать, вот пример кода, который извлечет реализацию 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);
}
Пожалуйста, обратите внимание, что это, вероятно, все еще пойманы статический анализатор Apple, если вы решите подать приложение, используя этот код в AppStore.
Это можно сделать без использования частных API. Все, что вам нужно сделать, это скрыть каждый UIImageView тень в нем. Heres код:
for (int x = 0; x < 10; ++x) {
[[[[[webView subviews] objectAtIndex:0] subviews] objectAtIndex:x] setHidden:YES];
}
Это сработало для меня. Благодаря! –
Это может произойти сбой, если нет подзаголовков – parceval
Это работает для нас здесь спасибо! Однако, что, если код Apple изменится? Какие ошибки меня в том, что если вы хотите отформатированный текст, вам рекомендуется использовать UIWebView ... Но UIWebView выглядит не так! – jowie
маленькая петля очень опасна, потому что она может упасть, если яблоко изменит количество подзонов.
таким образом, это по крайней мере не врезаться, когда что-то меняется:
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];
}
Это сбой, когда Apple решает поставить нулевые объекты в UIWebView. –
ОК, я положил еще один чек вокруг, счастлив теперь? ;) – denis2342
Это уборщик альтернатива решение «Николай Криль».Это скрывает только UIImageViews в UIWebView, а не UIWebBrowserView.
for (UIView *view in [[[webView subviews] objectAtIndex:0] subviews]) {
if ([view isKindOfClass:[UIImageView class]]) view.hidden = YES;
}
Благодаря Джеймс
Кто-то уже прошел это через процесс проверки appStore? – Francescu
Да, приложение, которое я создал, использует этот код и впервые провело проверку в понедельник. – jodm
После тестирования я полагаю, что это решение работает только для iOS 4.x? – alexleutgoeb
Вы должны быть осторожны, индикаторы прокрутки являются UIImageViews, а также. Я улучшить свой код, но вот основное подклассы решение:
http://forrst.com/posts/A_tiny_UIWebView_hack_remove_shadows_from_behi-gzH
Самый простой способ скрыть индикаторы прокрутки и прозрачный веб вид here в UIWebView
Чтобы удалить свитки.
for(UIView *view in webView.subviews){
if ([view isKindOfClass:[UIScrollView class]]) {
UIScrollView *sView = (UIScrollView *)view;
//to hide verticalScroller
sView.showsVerticalScrollIndicator = NO;
sView.showsVerticalScrollIndicator = NO;
}
}
Я добавил рекурсивный метод как категория до объекта UIView так, что он будет делать в глубину ходьбы от подвидов из приемного зрения метода, скрывая любые UIImageView подклассов, которые он находит. Он не будет сбой, если нет подзаголовков. Метод -apply: от BlocksKit. Вы можете переписать эту функцию, чтобы не использовать ее, но блок применяется параллельно каждому элементу принимающего массива, так что это довольно быстро.
@implementation UIView (RemoveShadow)
- (void)removeShadow {
if (self.subviews.count == 0 && [self isKindOfClass:[UIImageView class]]) {
self.hidden = YES;
} else if (self.subviews.count > 0) {
[self.subviews apply:^(id sender) {
[(UIView *)sender removeShadow];
}];
}
}
@end
траверс все подвиды, то UIImageViews, образ которого широко только 1 пиксель являются теневые изображения, вы можете скрыть их.
- (void)hideShadows {
[webview traverseViewsWithBlock:^(UIView *view) {
UIImageView *imgView = ([view isKindOfClass:[UIImageView class]] ? (UIImageView*)view : nil;
// image views whose image is 1px wide are shadow images, hide them
if (imgView && imgView.image.size.width == 1) {
imgView.hidden = YES;
}
}];
}
traverseViewsWithBlock делает то, что он выглядит следующим образом:
- (void)traverseViewsWithBlock:(void (^)(UIView* view))block
{
block(self);
for (id subview in self.subviews) {
[subview traverseViewsWithBlock:block];
}
}
насчет категории на UIWebView, как это:
- (BOOL)showsScrollShadows
{
for(UIImageView *imageView in [self imageViewsWithShadows])
{
if(imageView.hidden)
{
return NO;
}
break;
}
return YES;
}
- (void)setShowsScrollShadows:(BOOL)showsScrollShadows
{
[[self imageViewsWithShadows] makeObjectsPerformSelector:@selector(setHidden:) withObject:@(!showsScrollShadows)];
}
- (NSArray *)imageViewsWithShadows
{
NSArray *potentialShadowImageViews = (self.subviews.count > 0) ? [self.subviews[0] subviews] : nil;
if(potentialShadowImageViews.count > 0)
{
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings)
{
return [evaluatedObject isKindOfClass:[UIImageView class]];
}];
return [potentialShadowImageViews filteredArrayUsingPredicate:predicate];
}
return nil;
}
if (UIDevice.currentDevice.systemVersion.intValue < 7)
for (UIImageView *imageView in webView.scrollView.subviews)
if ([imageView isKindOfClass:[UIImageView class]] && imageView.image.size.width == 1)
imageView.hidden = YES;
Здесь является Swift функция, которая избавляется от тень в UIWebView в iOS 9. Это безопаснее, чем любая альтернатива, которую я видел на SO, потому что все в ней находится в документе Apple и в частности он изменяет свойство тени (в отличие от скрытия всего представления или какого-либо другого свойства представления).
func removeShadow(webView: UIWebView) {
for subview:UIView in webView.scrollView.subviews {
subview.layer.shadowOpacity = 0
for subsubview in subview.subviews {
subsubview.layer.shadowOpacity = 0
}
}
}
Вы всегда можете получить доступ к подвидам свойства UIView
(documentation). Каждый UIView
имеет layer
имущество, которое является CALayer
(documentation). Каждый CALayer
имеет shadowOpacity
(documentation).
Предостережения:
Попробуйте
func webViewDidFinishLoad(_ webView: UIWebView) {
for shadowView in self.webView.scrollView.subviews {
if !shadowView.isKind(of: UIImageView.self) {
shadowView.subviews[0].layer.shadowColor = UIColor.clear.cgColor
} else {
shadowView.layer.shadowColor = UIColor.clear.cgColor
}
}
}
http://stackoverflow.com/questions/655225/uiwebview-underside – LolaRun
Ваше изображение не делает, больше не работает ... – Besi
возможного дубликата [Удалить градиентный фон из UIWebView? ] (http://stackoverflow.com/questions/3009063/remove-gradient-background-from-uiwebview) – Pang