2013-04-04 3 views
1

Я создаю приложение, которое получает его содержимое HTML из веб-канала (JSON). Длина страниц варьируется от одной строки до сотен строк. Хотя UIWebView отлично способен прокручивать, мне нужен UITableView под UIWebView для отображения дополнительных пунктов меню. Это означает, что мне нужен весь вид для прокрутки, а не только UIWebView. Это также означает, что UIWebView не должен прокручиваться вообще и что он должен масштабироваться до содержимого.Xcode Изменение размера UIWebView на содержимое после кнопки

In short, my view is like this:

The UIImageView является заголовком, то UIWebView является содержанием, UITableView является меню сноски. Скрытая кнопка для создания segue сама по себе.

изменить размер UIWebView с этим кодом:

-(void)webViewDidFinishLoad:(UIWebView *)webView{ 
    WebView.frame = CGRectMake(WebView.frame.origin.x, WebView.frame.origin.y, WebView.frame.width, [WebView sizeThatFits:CGSizeZero].height); 
} 

Это работает для UIWebView и он получает правильно изменен. UITableView, однако, отображается с измененным размером UIWebView, он больше не толкается большим UIWebView.

Во-вторых, это представление имеет Segue для себя (его как вики-структуру с внутренними ссылками), которая работает как шарм. Но когда я возвращаюсь на страницу, UIWebView снова сохраняет свой первоначальный размер, он не изменяется. Segue заставляет приложение забыть новый размер UIWebView каким-то образом.

Как вы можете видеть, я борюсь с этим, все кажется настолько статичным и абсолютным, что мне нужно какое-то «относительное позиционирование». Но опять же я новичок в программировании на iOS и думаю как webdeveloper. Почему segue не помнит высоту UIWebView? Почему не UITableView не нажал? Что мне здесь не хватает? (Должно быть, я что-то отсутствует большое право?)

ответ

0

TableView для настройки как на Webview, установите TableViewframe использованием height из webview внутри самого webViewDidFinishLoad,

-(void)webViewDidFinishLoad:(UIWebView *)webView{ 
    WebView.frame = CGRectMake(WebView.frame.origin.x, WebView.frame.origin.y, WebView.frame.width, [WebView sizeThatFits:CGSizeZero].height); 
    TableView.frame = CGRectMake(TableView.frame.origin.x,WebView.frame.size.height + 20.0,TableView.frame.size.width,TableView.frame.size.height); // like this 
} 
+0

Спасибо за это. Хотя ответ iphonics в основном тот же, ваш гораздо яснее. Решает проблему с нажатием кнопки. Неполадка заключается в том, что segue не запоминает новую высоту UIWebView. Поэтому он просто отбрасывался, когда я меняю виды или даже прокручиваю. Решение, которое я нашел в другом потоке SO (13855810). Мне нужно было отключить «Использовать автозапуск», чтобы остановить автоматическую настройку макетов (теперь это звучит очевидно). Вы можете найти опцию «Использовать автозапуск» в «Инспекторе файлов» или первую кнопку/вкладку на панели настроек. –

+0

Да, да, спасибо. – Vedchi

0

Вы можете расположить вам контроль друг за другом, как показано ниже

CGRect rect=imageView.frame; 
float y=rect.origin.y; 

//We need to just change the y from the next control so for the next control y would be. 

y=y+rect.size.height+20.0;// 20.0 px padding 

//Now use the above rect to set the frame for next control in your case its webview 

rect=webView.frame; 

rect.origin.y=y; 

webView.frame=rect; //Re-Assign with changed y value 

//Now move to next 

y=y+rect.size.height+20.0;// 20.0 px padding 

rect=tblView.frame; 

rect.origin.y=y; 

tblView.frame=rect; //Re-Assign with changed y value 

Ваши все элементы управления должны быть выровнены по вертикали один за другим, вы можете поместить этот код в метод, и вызвать метод, когда вы чувствуете, что рамка меняются для любого управления ..

Надеется, что это помогает ..

Смежные вопросы