Отключите веб-представление WebKit

Это - что-то, что я должен был много раз делать, и единое решение все еще требует, чтобы Вы добавили немного несемантической разметки и некоторый браузер определенные взломы. Когда мы получим поддержку браузера для css 3, Вы получите свое вертикальное центрирование без прегрешения.

Для лучшего объяснения техники можно посмотреть статья, я адаптировал его от , но в основном это включает добавление дополнительного элемента и применение различных стилей в IE и браузерах, которые поддерживают position:table\table-cell на элементах нетаблицы.

Excuse me. What did you sleep in your clothes again last night. Really. You're gonna be in the car with her. Hey, not too early I sleep in on Saturday. Oh, McFly, your shoe's untied. Don't be so gullible, McFly. You got the place fixed up nice, McFly. I have you're car towed all the way to your house and all you've got for me is light beer. What are you looking at, butthead. Say hi to your mom for me.

существует много путей (взломы) для применения стилей в определенных наборах браузеров. Я использовал условные комментарии, но посмотрите на статью, связанную выше для наблюдения двух других методов.

Примечание: существуют простые способы получить вертикальное центрирование, если Вы знаете некоторые высоты заранее, при попытке центрировать одну строку текста, или в нескольких других случаях. Если у Вас есть больше деталей, тогда добавляют их, потому что может быть метод, который не требует взломов браузера или несемантической разметки.

Обновление: Мы начинаем получать лучшую поддержку браузера для CSS3, принося и поле гибкого провода, и преобразовывает как альтернативные методы для получения вертикального центрирования (среди других эффектов). См. этот другой вопрос для получения дополнительной информации о современных методах, но имейте в виду, что поддержка браузера является все еще поверхностной для CSS3.

5
задан Community 23 May 2017 в 10:28
поделиться

3 ответа

Вы можете создать подкласс NSWindow и установить свой подкласс как окно WebView. Затем вы можете контролировать, какие события будут отправляться в WebView, определив, на какой тип управления влияет событие мыши.

Это довольно грубая сила, но она полностью отключит любые события мыши, включая опрокидывание и т. Д .:

@interface WebViewEventKillingWindow : NSWindow 
{
    IBOutlet WebView* myWebView;
}
@end

@implementation WebViewEventKillingWindow
- (void)sendEvent:(NSEvent*)event
{
    NSView* hitView;
    switch([event type])
    {
        case NSScrollWheel:
        case NSLeftMouseDown:
        case NSLeftMouseUp:
        case NSLeftMouseDragged:
        case NSMouseMoved:
        case NSRightMouseDown:
        case NSRightMouseUp:
        case NSRightMouseDragged:
            hitView = [myWebView hitTest:[event locationInWindow]];
            if([hitView isDescendantOf:myWebView] && 
                         !([hitView isKindOfClass:[NSScroller class]] || 
                             [hitView isKindOfClass:[NSScrollView class]]))
            {
                return;
            }
            break;
        default:
            break;
    }
    [super sendEvent:event];
}
@end
6
ответ дан 14 December 2019 в 13:38
поделиться

Один из вариантов (на самом деле не самый лучший ...) - обернуть WebView внутри ScrollView, который вы создаете самостоятельно, а затем полностью отключите все действия пользователя с веб-представлением. Я полагаю, вы бы отрегулировали фрейм веб-представления так, чтобы была видна вся страница, а затем сделали бы его представлением содержимого прокрутки.

0
ответ дан 14 December 2019 в 13:38
поделиться

Вероятно, вы могли бы сделать это с помощью javascript (перебрать все ссылки, формы и т. Д.) На странице и деактивировать их, используя - [UIWebView stringByEvaluatingJavaScriptFromString:].

0
ответ дан 14 December 2019 в 13:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: