2013-04-28 59 views
0

我有一個UIViewController,在頂部有一個UIButton,在它下面有一個UITableView。上面的按鈕是「歷史記錄」,我將其設置爲用戶可以打開或關閉的功能。我使用帶按鈕和表格的XIB設置視圖控制器。在UIView中移動UITableView不會持久

當'history'功能被禁用時,我想隱藏曆史記錄按鈕並相應地將UITableView的頂部向上移動,因此在視圖的頂部沒有空白區域。

當我在viewDidAppear中調用我的hideHistory:方法時,它隱藏了歷史記錄按鈕並將表移動到我的視圖頂部。

但是,在打開模式視圖(向表中添加一行)然後關閉模式視圖之後,表格已經移回原來的位置。將該呼叫添加到viewWillAppear:不起作用。

以下是hideHistory的代碼。關於爲什麼桌子重置到原始位置的任何想法?

在此先感謝!

- (void)hideHistory 
{ 
    [historyButton setHidden:YES] ; 

    // move our data table up accordingly 
    CGFloat newTop = historyButton.frame.origin.y ; 

    CGRect newFrame = CGRectMake(dataTable.frame.origin.x, 
           newTop, 
           dataTable.frame.size.width, 
           dataTable.frame.size.height); 
    [dataTable setFrame:newFrame] ; 

    [[self view] setNeedsLayout] ; 
    [dataTable setNeedsLayout] ; 
} 
+0

你是說當模態被解除時,歷史按鈕被隱藏了嗎? – 2013-04-28 18:56:14

+0

檢查這是否是自動佈局的效果(默認爲開啓)。如果是這樣,你可能想在'viewWillLayoutSubviews'中做類似的事情,或者以不同的方式解決它。 – 2013-04-28 19:06:41

+0

@意義重大。謝謝!這是自動佈局被啓用。當我關閉它時,它就會起作用。對於我的大部分觀點,我已關閉自動佈局。不管出於什麼原因,我都沒有這個。再次感謝! – 2013-04-28 19:21:58

回答

0

關閉自動佈局並將呼叫置於viewWillAppear:是正確的答案。當自動佈局關閉時,UITableView正常向上移動並停留在那裏。此外,調用[[self view] setNeedsLayout]和[dataTable setNeedsLayout]是不必要的。