2016-04-24 37 views
0

好的,所以我試圖在我的視圖中實現一個添加評論框。這是佈局:移動導航控制器內的UIView不工作

我有一個UITabBarController包含UINavigationController其中我的UIViewController推送到。視圖佈局由UITableView和包含UITextViewUIButton的自定義UIView組成。

我監視鍵盤的通知,這是我的代碼有:

override func viewDidAppear(animated: Bool) { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillAppear), name: UIKeyboardWillShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillDisappear), name: UIKeyboardWillHideNotification, object: nil) 
} 

override func viewDidDisappear(animated: Bool) { 
    NSNotificationCenter.defaultCenter().removeObserver(self) 

} 

func keyboardWillAppear(notification: NSNotification){ 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() { 
     var frame = inputPanel.frame 
     frame.origin.y = self.view.frame.height - (keyboardSize.height + inputPanel.frame.size.height) 
     inputPanel.frame = frame 
    } 
} 

func keyboardWillDisappear(notification: NSNotification){ 
    var frame = inputPanel.frame 
    frame.origin.y = self.view.frame.height - inputPanel.frame.size.height 
    inputPanel.frame = frame 
} 

當鍵盤顯示器,我已經設置斷點並看到y座標被更新,但我認爲保持它是,隱藏在鍵盤後面。

一些筆記。我正在使用IQKeyboardManager,並且已禁用此類的距離處理。我還使用PureLayout來佈置自定義UIView內的控件。我沒有爲視圖控制器中的自定義UIView設置任何約束。該UITableView和自定義UIView的位置,如下圖所示viewWillLayoutSubview方法設置:

override func viewWillLayoutSubviews() { 
    let y = self.view.frame.height - 44 
    self.tableView.frame = CGRectMake(0, 0, self.view.frame.width, y) 
    self.inputPanel.frame = CGRectMake(0, y, self.view.frame.width, 44) 
} 

在另一方面,這是另一種觀點認爲正常使用我有不是UINavigationController的孩子。

正在發生什麼的屏幕截圖:

與輸入視圖的視圖:

view with the input view

當顯示鍵盤:

keyboard is shown

任何幫助是很大的讚賞。

回答

0

嘗試刪除此代碼從viewWillLayoutSubviewsviewDidLoad功能

override func viewDidLoad() { 
    super.viewDidLoad() 

    let y = self.view.frame.height - 44 
    self.tableView.frame = CGRectMake(0, 0, self.view.frame.width, y) 
    self.inputPanel.frame = CGRectMake(0, y, self.view.frame.width, 44) 
} 

我猜鍵盤後確實出現事件viewWillLayoutSubviews函數被調用。

0

嘗試到位UIKeyboardFrameBeginUserInfoKey

1

的因爲你不將約束應用於視圖中使用UIKeyboardFrameEndUserInfoKey,你需要告訴你將之前設定的框架使用框架的自動排版引擎。您可以通過將translatesAutoresizingMaskIntoConstraints設置爲true來完成此操作。例如:

override func viewWillLayoutSubviews() { 
    let y = self.view.frame.height - 44 
    self.tableView.translatesAutoresizingMaskIntoConstraints = true 
    self.tableView.frame = CGRectMake(0, 0, self.view.frame.width, y) 
    self.inputPanel.translatesAutoresizingMaskIntoConstraints = true 
    self.inputPanel.frame = CGRectMake(0, y, self.view.frame.width, 44) 
} 
+0

我試圖加入這個無濟於事。我沒有使用任何故事板或xib,我的所有視圖都以編程方式創建。當我切換到viewDidLayoutSubviews方法時,下面板甚至沒有顯示在視圖中 – bhmahler

+0

您可能想要發佈tableView和inputPanel的初始化代碼。你也確定keyboardWillAppear被召喚?它會進入你的if區塊嗎? – beyowulf

+0

它肯定會被叫去。我已經遍歷了那裏的代碼,看到origin.y值被改變了,但是視圖不會向上移動。我開始認爲這可能是與在自定義視圖中使用PureLayout相關的問題。 – bhmahler

相關問題