2012-02-01 46 views
1

這是一個奇怪的問題。我有創造與需要動畫,以免鍵盤時,將顯示一些文本字段創建新用戶的iPhone視圖控制器,即認爲動畫上下保持鍵盤的頂部和下部邊緣之間的最小間隙文本字段。當它從登錄現有用戶屏幕(故事板中的初始視圖控制器)以模態方式呈現時,工作正常。self.view.frame不再當動畫故事板中的初始視圖控制器

於是我決定改變應用一下,讓登錄/創建用戶意見將屬於同一個視圖控制器。他們過渡如此:

if(accountCreateView == nil) { 
    UINib *nib = [UINib nibWithNibName:@"NewAccountView" bundle:nil]; 
    NSArray *nibViews = [nib instantiateWithOwner:self options:nil]; 
    accountCreateView = [nibViews objectAtIndex:0]; 
} 

[UIView transitionFromView:(displayingLoginView ? loginView : accountCreateView) 
        toView:(displayingLoginView ? accountCreateView : loginView) 
        duration:0.6 
        options:(displayingLoginView ? 
          UIViewAnimationOptionTransitionFlipFromRight : 
          UIViewAnimationOptionTransitionFlipFromLeft) 
       completion:^(BOOL finished) { 
        if (finished) { 
         displayingLoginView = !displayingLoginView; 
        } 
       } 
]; 

這工作得很好。但是,執行視圖動畫的代碼不會。當文本字段變爲活動狀態時,將調用檢查文本字段與鍵盤接近程度的代碼,但在執行動畫塊時不會發生任何情況。

所以我檢查:

if([UIView areAnimationsEnabled]) 
    NSLog(@"Animations are enabled"); 
else 
    NSLog(@"Animations are disabled"); 

的動畫肯定啓用。

所以我把它背進一步viewDidLoad中,嘗試一個簡單的動畫,看看有什麼工作,先天下之憂:

CGRect viewFrame = loginNameTextField.frame; 
viewFrame.origin.y = 400.f; 
[UIView animateWithDuration:1.f 
         delay:0.f 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^ { 
        loginNameTextField.frame = viewFrame; 
       } 
       completion:NULL]; 

這工作得很好!文本字段在窗口中緩慢移動。

這什麼都不做,那就是混淆的部分:從self.view.frame設置時

CGRect viewFrame = self.view.frame; 
viewFrame.origin.y = 400.f; 
[UIView animateWithDuration:1.f 
         delay:0.f 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^ { 
        self.view.frame = viewFrame; 
       } 
       completion:NULL]; 

viewFrame有起源0,20和大小320460預期。

我試過直接設置框架屬性:

CGRect viewFrame = self.view.frame; 
viewFrame.origin.y = 400.f; 
self.view.frame = viewFrame; 

貌似我可以改變self.view的子視圖的框架,但不是self.view。修復程序可能是離開初始視圖控制器作爲故事板空白視圖以及兩者的登錄視圖中創建xibs和創建用戶視圖,並加載它們在viewDidLoad中 - 但爲什麼呢?

編輯:是的,切換視圖控制器的故事板版本到一個普通的空視圖和加入含有從作爲一個子視圖確實使動畫重新工作一個XIB實際UI的圖。儘管如此,仍然不知道爲什麼。

回答

1

如果你需要做的就是讓你的鍵盤上方的文本字段,爲什麼不降的UIViewController並更改爲一個UITableViewController和使用靜態細胞?每個單元格放置一個文本字段(創建足夠的單元格以滿足您的需求)並以您喜歡的方式進行設計。當你沒有第一響應者,並且屏幕上沒有足夠的單元格時,它將不會滾動。它不止適合什麼,然後它將滾動到達底部/頂部單元格。然而,無論您有多少個單元格,如果您選擇一個將被鍵盤覆蓋的文本字段,設備將自動將單元格滾動到可查看的位置。它全部內置,並且我始終使用此功能。它適用於文本字段和文本視圖。請記住註釋掉部分的數量,每部分的行數以及索引路徑方法的單元格,以便靜態單元格可以正常工作。它節省了大量的編碼。

HTH

羅布

+0

這是一個好主意,我可以看到它是方便,自動滾動(或更改表的框架,然後用scrollToRowAtIndexPath),但認爲是比這一點更復雜爲什麼我需要轉移包含的視圖。 – 2012-02-01 22:14:32

+0

好的。我想我也會添加到我的帖子中,在某些情況下,它也有助於在UITableView中具有頁眉和頁腳視圖。如果有幫助,你可以在這些地方放置更復雜的東西。當然,這限制了你將艱難的東西放在桌子視圖的頂部和底部,這可能不是你想要的,這取決於你的設計。 – Rob 2012-02-02 10:40:57

相關問題