Как разместить UIToolbar в UIWebView - PullRequest
0 голосов
/ 19 февраля 2012

У меня есть пример проекта, в котором я создал пользовательский UIWebView с именем WebView . Они добавляются в представление в UIViewController . Два WebView инициализируются в viewDidLoad и добавляются в список массивов. Первый добавляется как подпредставление på self.view . Раскадровка содержит UIBarButton, и при нажатии на нее второй WebView добавляется как подпредставление к self.view .

- (void)viewDidLoad
{
    [super viewDidLoad];

    WebView *webView1 = [[WebView alloc] initWithFrame:self.view.bounds];
    WebView *webView2 = [[WebView alloc] initWithFrame:self.view.bounds];
    self.webViews = [NSArray arrayWithObjects: webView1, webView2, nil];

    UIWebView *webView = [self.webViews objectAtIndex:0];
    [self.view addSubview:webView];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.google.com/"]]];
}

Вот реализация WebView , где панель инструментов добавляется в нижнюю часть (-50px) представления:

@implementation WebView

- (void) initToolbar {
    UIToolbar *toolbar = [UIToolbar new];
    toolbar.barStyle = UIBarStyleBlackTranslucent;
    toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
    [toolbar sizeToFit];
    toolbar.frame = CGRectMake(0, self.frame.size.height-80, 320, 30);

    [self addSubview:toolbar];
}

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        [self initToolbar];
    }
    return self;
}

@end

Проблема в том, что панель инструментов не имеет одинакового положения в двух видах (они могут быть расположены как первый). Почему они не расположены одинаково?

Вы можете скачать небольшой пример проекта здесь: http://uploads.demaweb.dk/UIWebView.zip

Мои заметки: Как уже упоминалось, два WebView в настоящее время инициализируются в viewDidLoad . Если я вместо этого подожду и сначала инициализирую, тогда, когда они мне понадобятся, похоже, все работает как ожидалось.

1 Ответ

1 голос
/ 19 февраля 2012

Дело в том, что self.frame.size.height на viewDidLoad - это не то же самое, когда вы инициализируете его нажатием кнопки.Если вы добавляете UIWebView непосредственно в viewDidLoad, UINavigationBar вашего UINavigationController еще не загружен, и фрейм self.view воспринимается как (не совсем, потому что является ) больше.

Это объясняет разницу в 40,0 (?) Баллов.

Одним из возможных решений этого проблемного поведения является инициализация и добавление (хотя бы первого) экземпляра UIWebView в методе viewWillAppear:animated.(UIViewController уже реализует этот метод)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...