【问题标题】:Xcode Resizing UIWebView to content after back buttonXcode在返回按钮后将UIWebView调整为内容
【发布时间】:2013-03-26 05:52:25
【问题描述】:

我正在构建一个从 Web 提要 (JSON) 获取其 HTML 内容的应用程序。页面的长度从单行到数百行不等。 虽然 UIWebView 完全可以滚动,但我需要 UIWebView 下的 UITableView 来显示额外的菜单项。这意味着我需要滚动整个视图而不仅仅是 UIWebView。这也意味着 UIWebView 根本不应该滚动,它应该缩放到内容。

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(它就像一个带有内部引用的 wiki 结构),它就像一个魅力。但是当我返回一个页面时,UIWebView 再次保持其原始大小,它不会调整大小。 segue 使应用程序以某种方式忘记了 UIWebView 的新大小。

正如您所看到的,我正在为此苦苦挣扎,一切似乎都是静态和绝对的,而我需要一些“相对定位”。但话又说回来,我是 iOS 编程的新手,并且像 Web 开发人员一样思考。为什么 segue 不记得 UIWebView 的高度?为什么 UITableView 没有下推?我在这里想念什么? (我一定是错过了什么大事吧?)

【问题讨论】:

    标签: ios iphone xcode ipad


    【解决方案1】:

    要根据Webview 调整TableView,请在webViewDidFinishLoad 本身内使用heightwebview 设置您的TableView frame

    -(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
    }
    

    【讨论】:

    • 谢谢。尽管 iphonics 的答案基本相同,但您的答案要清晰得多。它解决了下推问题。它没有解决的是segue不记得UIWebView的新高度的问题。所以当我改变视图甚至滚动时它就会弹回来。我在另一个 SO 线程 (13855810) 中找到的解决方案。我需要禁用“使用自动布局”来阻止布局自动调整(现在听起来很明显)。您可以在“文件检查器”或设置栏中的第一个按钮/选项卡中找到“使用自动布局”选项。
    【解决方案2】:

    您可以像下面这样一个接一个地放置控件

    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
    

    你所有的控件应该一个接一个地垂直对齐,你可以把这段代码放在一个方法中,当你感觉到任何控件的框架发生变化时调用该方法..

    希望这会有所帮助..

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2014-03-16
      • 1970-01-01
      • 2013-12-06
      • 2019-11-16
      • 2016-01-12
      • 2011-08-20
      • 2012-01-08
      • 2023-03-05
      相关资源
      最近更新 更多