我拼命地试图解决这个问题,我花了一整天时间没有运气。我想要做的就是有一个用户可以点击的文本字段列表,它会将键盘放在页面上,这样A)字段就不会被阻塞而且(我已经想出那个部分)和B)顶部当键盘弹出时,视图不会被切断。这是我到目前为止(http://imgur.com/a/LExyo),但你可以清楚地看到问题〜这是视图的顶部我无法向上滚动更远。我试图将整个内容埋在一个scrollview中,然后更改scrollview的内容,但这没有做任何事情。任何帮助,将不胜感激。谢谢。 (我试图在swift 3中这样做。)
class ViewController4: UIViewController, UITextFieldDelegate {
var dataState: Data?
@IBOutlet weak var UserNameLabel: UILabel!
@IBOutlet weak var TextField1Outlet: UITextField!
@IBOutlet weak var TextField2Outlet: UITextField!
@IBOutlet weak var TextField3Outlet: UITextField!
@IBOutlet weak var TextField4Outlet: UITextField!
@IBOutlet weak var TextField5Outlet: UITextField!
@IBOutlet var ViewFrame: UIView!
@IBOutlet weak var scrollView: UIScrollView!
@IBAction func TextField1Action(_ sender: Any) {
}
@IBAction func TextField2Action(_ sender: Any) {
}
@IBAction func TextField3Action(_ sender: Any) {
}
@IBAction func TextField4Action(_ sender: Any) {
}
@IBAction func TextField5Action(_ sender: Any) {
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UserNameLabel.text = dataState?.LoginName
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationViewController = segue.destination as? ViewController1 {
destinationViewController.dataState = dataState
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewDidLoad() {
super.viewDidLoad()
scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)
scrollView.delegate = self as? UIScrollViewDelegate
TextField1Outlet.returnKeyType = UIReturnKeyType.done
TextField1Outlet.delegate = self
TextField2Outlet.returnKeyType = UIReturnKeyType.done
TextField2Outlet.delegate = self
TextField3Outlet.returnKeyType = UIReturnKeyType.done
TextField3Outlet.delegate = self
TextField4Outlet.returnKeyType = UIReturnKeyType.done
TextField4Outlet.delegate = self
TextField5Outlet.returnKeyType = UIReturnKeyType.done
TextField5Outlet.delegate = self
NotificationCenter.default.addObserver(self, selector: #selector(ViewController4.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(ViewController4.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
let newHeight = self.view.frame.height + keyboardSize.height
scrollView.contentSize = CGSize(width: self.view.frame.width, height: newHeight)
}
}
}
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
scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)
}
}
}
}
答案 0 :(得分:0)
使用内容插入而不是内容大小:
scrollView.contentInset = UIEdgeInsets(top: 0.0, left: 0.0, bottom: /* keyboard height */, right: 0.0)
答案 1 :(得分:0)
支持Vasilii Muravev回答你有最后一个错误。
步骤1)
SELECT ifnull(p.product_name,'Total') As ProductName,
Sum((p.list_price - p.discount_percent ) * Quantity) AS TotalAmount
FROM Products as p, order_items as oi
where p.product_id = oi.product_id
GROUP BY ProductName WITH ROLLUP
步骤2)
let insets = scrollView.contentInset
//Here you should save the PREVIOUS_BOTTOM
scrollView.contentInset = UIEdgeInsets(top: insets.top, left: insets.left, bottom: /* keyboard height */, right: insets.right)