Updaten der Layout Constraints

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Rabattcode für die heise MacDev 2020: Macoun20

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Updaten der Layout Constraints

    Guten tag zusammen,

    ich wollte gerade ein View per Knopfdruck ausfahren lassen, habe dafür die folgende Funktion geschrieben:

    Quellcode

    1. func textFieldDidBeginEditing(_ textField: UITextField) {
    2. self.view.layoutIfNeeded()
    3. UIView.animate(withDuration: 0.5, animations: {
    4. self.dockView.heightAnchor.constraint(equalToConstant: 400).isActive = true
    5. self.view.layoutIfNeeded()
    6. }, completion: nil)
    7. }

    Leider verändert sich jedoch nichts beim drücken des Textfields.

    Vielen Dank für eure Hilfe!
    Tom

    Wichtig wäre noch zu sagen, dass ich den View per Code erstellt habe. Hier der restliche Code des ViewControllers falls benötigt:

    Quellcode

    1. import UIKit
    2. import Parse
    3. class ChatViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
    4. private let reuseIdentifer = "ChatCell"
    5. var titleLabel: UILabel!
    6. var backButton: UIButton!
    7. let tableView = UITableView()
    8. var dockView: UIView!
    9. var dockTextField: UITextField!
    10. var dockSendButton: UIButton!
    11. var messages = [String]()
    12. var userName = [String]()
    13. var othersMessages = [String]()
    14. var othersUserName = [String]()
    15. var refresher: UIRefreshControl = UIRefreshControl()
    16. override func viewDidLoad() {
    17. super.viewDidLoad()
    18. view.backgroundColor = .lightGray
    19. retrieveMessages()
    20. createViewControllerItems()
    21. self.dockTextField.delegate = self
    22. }
    23. func createViewControllerItems() {
    24. // - MARK: DockView
    25. dockView = UIView()
    26. dockView.backgroundColor = .lightGray
    27. view.addSubview(dockView)
    28. dockView.translatesAutoresizingMaskIntoConstraints = false
    29. dockView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    30. dockView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    31. dockView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    32. dockView.topAnchor.constraint(equalTo: tableView.bottomAnchor).isActive = true
    33. // - MARK: TextField
    34. dockTextField = UITextField()
    35. dockTextField.placeholder = "Nachricht"
    36. dockTextField.backgroundColor = .white
    37. dockTextField.borderStyle = .roundedRect
    38. dockTextField.keyboardType = .default
    39. //dockTextField.addTarget(self, action: #selector(startEditing), for: .editingDidBegin)
    40. dockView.addSubview(dockTextField)
    41. dockTextField.translatesAutoresizingMaskIntoConstraints = false
    42. dockTextField.topAnchor.constraint(equalTo: dockView.topAnchor, constant: 5).isActive = true
    43. dockTextField.leftAnchor.constraint(equalTo: dockView.leftAnchor, constant: 30).isActive = true
    44. dockTextField.widthAnchor.constraint(equalToConstant: 270).isActive = true
    45. // - MARK: Senden Button
    46. dockSendButton = UIButton()
    47. dockSendButton.setTitle("Senden", for: UIControl.State.normal)
    48. dockSendButton.setTitleColor(.darkGray, for: UIControl.State.normal)
    49. dockSendButton.addTarget(self, action: #selector(savingMessage), for: .touchUpInside)
    50. dockView.addSubview(dockSendButton)
    51. dockSendButton.translatesAutoresizingMaskIntoConstraints = false
    52. dockSendButton.topAnchor.constraint(equalTo: dockView.topAnchor, constant: 5).isActive = true
    53. dockSendButton.centerXAnchor.constraint(equalTo: dockView.centerXAnchor, constant: 150).isActive = true
    54. }
    55. @objc func backMenu() {
    56. let vc: MainViewController!
    57. vc = MainViewController()
    58. vc.modalPresentationStyle = .fullScreen
    59. present(vc, animated: true)
    60. }
    61. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    62. return messages.count
    63. }
    64. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    65. let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifer, for: indexPath) as! ChatCell
    66. cell.descriptionLabel.text = messages[indexPath.row]
    67. cell.userNameLabel.text = userName[indexPath.row]
    68. return cell
    69. }
    70. override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    71. self.view.endEditing(true)
    72. }
    73. @objc func dismissKeyboard() {
    74. view.endEditing(true)
    75. }
    76. func tableViewTapped() {
    77. self.dockTextField.endEditing(true)
    78. }
    79. @objc func startEditing() {
    80. let chatToolBar = UIToolbar()
    81. chatToolBar.sizeToFit()
    82. //Costumisazions
    83. chatToolBar.barTintColor = .gray
    84. chatToolBar.tintColor = .white
    85. let jobDoneButton = UIBarButtonItem(title: "Fertig", style: .plain, target: self, action: #selector(ChatViewController.dismissKeyboard))
    86. chatToolBar.setItems([jobDoneButton], animated: false)
    87. chatToolBar.isUserInteractionEnabled = true
    88. dockTextField.inputAccessoryView = chatToolBar
    89. }
    90. func textFieldDidBeginEditing(_ textField: UITextField) {
    91. self.view.layoutIfNeeded()
    92. UIView.animate(withDuration: 0.5, animations: {
    93. self.dockView.heightAnchor.constraint(equalToConstant: 400).isActive = true
    94. self.view.layoutIfNeeded()
    95. }, completion: nil)
    96. let chatToolBar = UIToolbar()
    97. chatToolBar.sizeToFit()
    98. //Costumisazions
    99. chatToolBar.barTintColor = .gray
    100. chatToolBar.tintColor = .white
    101. let jobDoneButton = UIBarButtonItem(title: "Fertig", style: .plain, target: self, action: #selector(ChatViewController.dismissKeyboard))
    102. chatToolBar.setItems([jobDoneButton], animated: false)
    103. chatToolBar.isUserInteractionEnabled = true
    104. dockTextField.inputAccessoryView = chatToolBar
    105. }
    106. func textFieldDidEndEditing(_ textField: UITextField) {
    107. self.view.layoutIfNeeded()
    108. UIView.animate(withDuration: 0.5, animations: {
    109. self.dockView.heightAnchor.constraint(equalToConstant: 60).isActive = true
    110. self.view.layoutIfNeeded()
    111. }, completion: nil)
    112. }
    113. @objc func savingMessage() {
    114. self.dockTextField.endEditing(true)
    115. self.dockTextField.isEnabled = false
    116. self.dockSendButton.isEnabled = false
    117. let newMessageObject: PFObject = PFObject(className: "Message")
    118. newMessageObject["Text"] = self.dockTextField.text
    119. newMessageObject["Userid"] = PFUser.current()?.objectId
    120. newMessageObject["username"] = PFUser.current()?.username
    121. //newMessageObject["Othersid"] = ""
    122. //newMessageObject["otherUsername"] = ""
    123. newMessageObject.saveInBackground { (succeeded, error) in
    124. if (succeeded) {
    125. print("Gespeichert.")
    126. } else {
    127. print("ERROR: Speichern fehlgeschlagen.")
    128. }
    129. self.dockTextField.text = nil
    130. self.dockSendButton.isEnabled = true
    131. self.dockTextField.isEnabled = true
    132. }
    133. self.retrieveMessages()
    134. }
    135. @objc func retrieveMessages() {
    136. let query:PFQuery = PFQuery(className: "Message")
    137. query.findObjectsInBackground { (objects:[AnyObject]!, error:Error!) -> Void in
    138. self.messages = [String]()
    139. for messageObject in objects {
    140. let messageText:String? = (messageObject as! PFObject)["Text"] as? String
    141. let userName:String? = (messageObject as! PFObject)["username"] as? String
    142. if messageText != nil {
    143. self.messages.append(messageText!)
    144. self.userName.append(userName!)
    145. }
    146. }
    147. self.tableView.reloadData()
    148. }
    149. }
    150. func pullToRefresh() {
    151. refresher.attributedTitle = NSAttributedString(string: "Pull to refresh!")
    152. refresher.addTarget(self, action: #selector(retrieveMessages), for: UIControl.Event.valueChanged)
    153. tableView.addSubview(refresher)
    154. }
    155. }
    Alles anzeigen