2015-01-08 159 views
0

我需要关于如何做到这一点(最佳实践方法)的建议是:聊天屏幕/窗口布局设计

chat screen design[][1]

我使用的XCode 6.1.1使用斯威夫特与自动布局启用。 因此,在图片中,我已经设置了这种布局。 注意,在滚动视图,我把UITableView连同另一UIView它含有UITextField

我也已经实现了这一点:How to make a UITextField move up when keyboard is present?

因此,这里是我的代码:

func registerForKeyboardNotifications() 
{ 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidShow:", name: UIKeyboardDidShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidHide:", name: UIKeyboardDidHideNotification, object: nil) 
} 

func keyboardDidShow(aNotification: NSNotification) 
{ 
    var info: NSDictionary = aNotification.userInfo! 
    var kbSize: CGSize = (info.objectForKey(UIKeyboardFrameBeginUserInfoKey)?.CGRectValue() as CGRect!).size 

    var contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0) 
    svBody.contentInset = contentInsets 
    svBody.scrollIndicatorInsets = contentInsets 

    self.view.layoutIfNeeded() 
} 

func keyboardDidHide(aNotification: NSNotification) 
{ 
    var contentInsets: UIEdgeInsets = UIEdgeInsetsZero 
    svBody.contentInset = contentInsets 
    svBody.scrollIndicatorInsets = contentInsets 

    self.view.layoutIfNeeded() 
} 

的问题是当我运行它时,我还可以滚动我的viewBottom后面的键盘,我不想那样。

result[][2]

我试图实现是:

  • 我需要viewBottom粘在键盘的顶部
  • 只有myTable可滚动

我怎样才能做到这一点最好的方式?

回答

1

好吧我自己想通了。

下面的代码供大家使用:

func registerForKeyboardNotifications() 
{ 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidShow:", name: UIKeyboardDidShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardDidHide:", name: UIKeyboardDidHideNotification, object: nil) 
} 

func keyboardDidShow(aNotification: NSNotification) 
{ 
    var info: NSDictionary = aNotification.userInfo! 
    var kbSize: CGSize = (info.objectForKey(UIKeyboardFrameBeginUserInfoKey)?.CGRectValue() as CGRect!).size 

    UIView.animateWithDuration(0.2, animations: {() -> Void in 
     var contentInsets: UIEdgeInsets = UIEdgeInsetsMake(kbSize.height, 0, 0, 0) 
     self.myTable.contentInset = contentInsets 
     self.myTable.scrollIndicatorInsets = contentInsets 

     var contentOffsetSV: CGPoint = CGPointMake(0, kbSize.height) 
     self.svBody.contentOffset = contentOffsetSV 

     self.view.layoutIfNeeded() 
    }) 

} 

func keyboardDidHide(aNotification: NSNotification) 
{ 
    UIView.animateWithDuration(0.2, animations: {() -> Void in 
     var contentInsets: UIEdgeInsets = UIEdgeInsetsZero 
     self.myTable.contentInset = contentInsets 
     self.myTable.scrollIndicatorInsets = contentInsets 

     var contentOffsetSV: CGPoint = CGPointMake(0, 0) 
     self.svBody.contentOffset = contentOffsetSV 

     self.view.layoutIfNeeded() 
    }) 
} 

好与他人分享) 干杯,

阿德里安