2016-11-22 29 views
-1

这是屏幕的整体布局。该按钮位于滚动视图内,以便当第一个响应者出现时,该按钮将被推送到用户视图。然后回落时,第一响应者辞职ScrollView不断推送文本字段

enter image description here

在第二张图片是什么样子时,第一反应是存在等。按钮确实向上移动,但现在文本字段被推离屏幕。如果有一种方法可以让按钮向上移动而不将文本框从屏幕上移开,那就太棒了。 enter image description here

@IBOutlet weak var ScrollView: UIScrollView! 

@IBOutlet weak var TextField: UITextField! 

@IBOutlet weak var testButton: UIButton! 

func closeKeyboard(){ 
self.view.endEditing(true) 
} 
override func touchesBegan(_ touches: Set<UITouch>, with event:   UIEvent?) { 
closeKeyboard() 
} 

override func viewDidLoad() { 
super.viewDidLoad() 


NotificationCenter.default.addObserver(self, selector: #selector(scrollviewtest.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 

NotificationCenter.default.addObserver(self, selector: #selector(scrollviewtest.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 

} 

func keyboardWillShow(notification: NSNotification) { 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if self.view.frame.origin.y == 0{ 
      self.view.frame.origin.y -= keyboardSize.height 
     } 
    } 

} 

func keyboardWillHide(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if self.view.frame.origin.y != 0{ 
      self.view.frame.origin.y += keyboardSize.height 
     } 
    } 

}

+0

是否使用'AutoLayout'?你如何移动视图?向上移动视图的代码。 – Rikh

+0

为什么当你提交响应者时你没有设置框架 –

+0

发表了一些代码,然后只有人可以找出任何解决方案,但如果按钮和“UITextField”在同一个“UIScrollView”上,那么你必须重新设置框架'UIButtons '。 – Suryakant

回答

0

使用像这样的文本框的变化框架,

func keyboardWillShow(_ notification: Notification) { 
    var scrollContentSize = CGSize(width: CGFloat(320), height: CGFloat(345)) 
    self.scrollView.contentSize = scrollContentSize 
    var info = notification.userInfo! 
    var kbSize = (info[UIKeyboardFrameBeginUserInfoKey] as! String).cgRect().size 
    var contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height + 100, 0.0) 
    self.scrollView.contentInset = contentInsets 
    self.scrollView.scrollIndicatorInsets = contentInsets 
    var keyboardSize = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! String).cgRect().size 
    UIView.animate(withDuration: 0.3, animations: {() -> Void in 
     var f = self.view.frame 
     f.origin.y = -keyboardSize.height + 50 
     self.view.frame = f 
    }) 
} 

func keyboardWillHide(_ notification: Notification) { 
    UIView.animate(withDuration: 0.3, animations: {() -> Void in 
     var f = self.view.frame 
     f.origin.y = 0.0 
     self.view.frame = f 
    }) 
} 
+0

它给我一个“var kbSize”和“var keyboardSize”的错误,这两个错误都说“类型'String'的值没有成员'cgRect'” –

+0

CGRectFromString(“some string”) –