2014-04-19 60 views
2

我看了很多類似這樣的問題,但儘量嘗試,我不能讓UIWebView以任何方式滾動或交互。下面是代碼:爲什麼UIWebView不滾動?

- (void)loadView { 
    [super loadView]; 

    ... 

    [self.displayView loadHTMLString:entry->infoHtml baseURL:nil]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.displayView.userInteractionEnabled = YES; 
    self.displayView.scrollView.showsVerticalScrollIndicator = YES; 
    self.displayView.scrollView.scrollEnabled = YES; 
    [self.displayView.scrollView flashScrollIndicators]; 
} 

出現視圖,顯示了所有正確的內容,並且示出了垂直滾動條用於第二,正確地表示當前顯示的內容的一部分。

但我不能滾動它。觸摸內容並移動我的手指根本沒有任何影響。與同一家長下不重疊的UITableView進行互動可以正常工作;觸摸條目將更新UIWebView的內容,因爲它已被編程。

的一個UIWebView在使用這些選項的故事板創建:

  • 尺度以適合:選中(選中時,不能捏到變焦,無論是)
  • 分頁:unpaginated
  • 模式:方面適合(嘗試了幾種;所有未滾動)
  • UserInteractionEnabled:檢查(父視圖也有此檢查)

該視圖是完全可見的。我試圖讓它顯着小於其父,並且顯示的內容總是停在正確的位置。這個視圖沒有委託或手勢識別器。

包含視圖有一個UITableView和一個UILabel,它們都沒有重疊UIWebView的區域。我試圖改變故事板上場景中的視圖順序,但這也沒有什麼區別。

我試圖去除UIBuilder視圖和編程方式創建它像這樣:

self.displayView = [[UIWebView alloc] initWithFrame:CGRectMake(400, 220, 400, 300)]; 
[self.view addSubview:self.displayView]; 

相同的結果。我嘗試刪除場景中的所有其他元素,除了這個以編程方式創建的UIWebView。仍然是相同的結果。

其他地方在我的代碼,我已經把UIWebViewUIAlertView@"accessoryView"有預期我可以滾動的內容。

是否還有其他事情需要完成才能夠滾動UIWebView子視圖?

二零一四年四月二十零日:事實上,如果我下面的行添加到我的-loadView方法的底部,我得到了相同的HTML內容,因爲它背後的窗口對話框,但我上午能夠滾動對話框版本。我能想到的唯一區別是對話框是模態(強制焦點),而我自己的窗口同時使用UITableViewUIWebView仍允許與其後面的可見視圖進行交互。

UIWebView* contents = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 250, 250)]; 
[contents loadHTMLString:entry->infoHtml baseURL:nil]; 
[alertView setValue:contents forKey:@"accessoryView"]; 
[alertView show]; 

在另一方面,如果我取代最後兩行[self.view addSubview:contents];然後我得到在屏幕的左上角相同的第二HTML視圖,但將滾動。

+0

奇怪!我添加UIWebView,它可以正常滾動。這個webView的內容太短了,導致你無法滾動。讓我們嘗試在另一個項目中添加UIWebView並進行測試。 – nmh

+0

如果您在移動Safari瀏覽器中運行,您是否驗證過您嘗試使用的HTML? – aeskreis

+0

我試過幾種不同的HTML文件,所有這些文件在瀏覽器中都顯示得很好。我的UIWebView似乎也喜歡它,並顯示文件的頂部部分很好。我只是無法滾動它來查看以後的內容。如果我將字體縮小或「縮放到合適」,那麼我還可以看到更多(或全部)文件。 –

回答

1

我已經完成了。首先,我想在我的MainController類中添加這-viewDidLoad

UIWebView* contents = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 250, 250)]; 
[contents loadHTMLString:@"<html><head><title>FOO</title></head><body><p>A</p><p>B</p><p>C</p><p>D</p><p>E</p><p>F</p><p>G</p><p>H</p><p>I</p><p>J</p><p>K</p><p>L</p><p>M</p><p>N</p><p>O</p><p>P</p><p>Q</p><p>R</p><p>S</p><p>T</p><p>U</p><p>V</p><p>W</p><p>X</p><p>Y</p><p>Z</p></body></html>" baseURL:nil]; 
contents.backgroundColor = [UIColor redColor]; 
[self.view addSubview:contents]; 

它顯示卻是不可滾動。我有一個StartupController處理初始化應用程序並首先運行,因此我在那裏添加了相同的代碼。 這是可滾動的!啊哈!

我想到覆蓋MainView的頂級Google Map(GMSMapView)可能會吞服滾動事件,但會傳遞點擊事件。在場景中,我創建了一個簡單的/簡單的/空的頂級簡單的,而不是僅僅一個地圖視圖,並且使GMSMapView成爲一個完整的小孩。現在,當我將視圖添加到新的頂層(簡單)視圖時,它們是兄弟姐妹而不是地圖的子節點,並正確地獲取所有事件。

結果,我UIWebView現在是滾動的。感謝大家的意見和建議!經過幾個月的不斷嘗試不同的事情才終於找到了答案。

+0

如果有人知道如何使用XCode追蹤*事件,請告訴我。也許那時我可以很快看到吞噬滾動事件的東西。 –

0

請檢查Web視圖包含完全其父視圖的邊界(依此類推,直到視圖層次結構)內。一個簡單的方法是設置一些背景顏色。可能你有一些不符合你期望的約束。

同樣,所有的家長意見是啓用用戶交互。

編輯:據我瞭解,Web視圖是完全可見。但這並不意味着它被包含在其超級視圖的界限內。如果超級視圖的clipsToBounds = NO(默認,我相信),那麼任何超出其邊界的子視圖將是可見的,但不會接受觸摸。

+0

我在我的問題中明確表示該視圖完全可見。我試圖用多種方式展示它,包括通過故事板和編程方式,以各種大小和邊界。我還指出,在父視圖中啓用了用戶交互,後者由相鄰的UITableView接受觸摸事件展示。 –

+0

我明白了 - 我看到了。但是,如果子視圖包含在其父級的邊界之外(並且clipsToBounds = NO,默認...),則子視圖可能是完全可見的(但不會接收觸摸)。我會用這些信息更新我的答案。感謝downvote。 – TomSwift