2013-05-28 117 views
1

我使用代理方法cellForItemAtIndexPath動態地將UICollectionViewCell s添加到UICollectionView。每次該方法運行時創建的UICollectionViewCell包含內容大小不一的UIWebView。以編程方式創建時,我無法設置UICollectionViewCell的大小。相反,我必須實施一種名爲sizeForItemAtIndexPath的方法。如何根據UIWebview的內容調整UICollectionViewCell的大小?

不幸的是,這個尺寸確定方法似乎被稱爲之前實際上創建單元格的方法。目前,我無法參考UIWebView的尺寸來幫助找到合適的細胞大小。我所有的是UIWebView的實際內容,但我不知道如何使用它來查找大小,因爲內容包括樣式化的HTML和圖像。

我試圖在內存中創建UIWebViews並從它們中獲取大小,但對於尺寸我總是得到0。我有些鬆了一口氣,因爲它對我來說似乎是一個醜陋的黑客。

有什麼我可以嘗試嗎?

回答

1

也許這會有所幫助:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView { 
    CGRect frame = aWebView.frame; 
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero]; 
    frame.size = fittingSize; 
    aWebView.frame = frame; 
} 
+1

謝謝,但這是我嘗試過的一件事。不幸的是,當我這樣做時,兩個軸的框架尺寸都爲零。我想這是因爲'UIWebView'在這一點上還沒有創建,所以得到它的框架是不可能的。 – Hassan

+0

你說得對,我現在增加了一個更好的答案。 – MacMark

+0

@MacMark在我的情況下,UIWebView不會擴展到它的內容大小,它與UICollectionViewCell中的其他視圖重疊。 –

1

我以前的答案的作品不是UICollectionView但UITableView的。這在UICollectionViewController工作對我來說:

NSString *webViewHeight = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"idOfMainElementInHtml\").offsetHeight;"]; 

使用這

- (void)webViewDidFinishLoad:(UIWebView *)webView 

記得在的NSMutableDictionary它映射NSIndexPath對象,以高度值的值。每次在此方法中比較以前的值和新值,然後讓Layout對象使用此字典來計算新佈局。

玩得開心:-)

+0

再次感謝。我也嘗試過,而且我的身高也是零。 – Hassan

+0

在這種情況下,HTML元素找不到給定的ID。在Safari(桌面)中啓用開發人員模式,並將開發人員菜單連接到iOS模擬器中的Web視圖。嘗試在底部的Web Inspector行中使用getElementById運行JavaScript,直到獲得預期結果。同時使用Web Inspector檢查HTML。比較名爲「調試iOS上的UIWebViews和網站」的WWDC 2012中的會話600。 – MacMark

+0

根據你的HTML,你也可以嘗試[webView stringByEvaluatingJavaScriptFromString:@「document.body.offsetHeight」]; – MacMark

相關問題