2013-04-04 102 views
1

我正在构建一个应用程序,它从Web订阅源(JSON)获取其HTML内容。页面的长度从一行到几百行不等。 尽管UIWebView完全能够滚动,但我需要UIWebView下的UITableView来显示其他菜单项。这意味着我需要整个视图来滚动而不仅仅是UIWebView。这也意味着UIWebView不应该滚动,它应该缩放到内容。Xcode将UIWebView调整为后退按钮后的内容大小

In short, my view is like this:

的的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压低。其次,这个观点有一个塞格本身(它像一个具有内部参考的维基结构),其作用就像一个魅力。但是当我回到页面时,UIWebView再次保持其原始大小,它不会被调整大小。 segue使应用程序以某种方式忘记了UIWebView的新大小。

正如你所看到的,我正在为此付出努力,一切似乎都如此静止而绝对,而我需要一些“相对定位”。但是,我又是新来的iOS编程和像web开发人员一样思考。为什么segue不记得UIWebView的高度?为什么不是UITableView被推下来?我在这里错过了什么? (我必须失去了一些东西大吧?)

回答

0

要调整TableViewWebview,设置你的TableViewframe使用webviewwebViewDidFinishLoad自身内部height

-(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)中找到的解决方案。 我需要禁用'使用Autolayout'来停止布局自动调整(现在听起来很明显)。您可以在'文件检查器'中找到'使用Autolayout'选项,或者在设置栏中找到第一个按钮/选项卡。 – 2013-04-04 10:12:39

+0

是的,谢谢。 – Vedchi 2013-04-04 10:18:09

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 

你所有的控制应垂直对准了一个又一个,你可以把这个代码在方法,并调用该方法,每当你觉得框架正在改变任何控制..

希望这有助于..