0

I have a container view that does not show at all. The tab bar disappears along with the background.The container view will include a textField with a send button on the right edge of the screen. What am I missing or should not do?

override func viewDidLoad() {

self.tabBarController?.view.removeFromSuperview()
    collectionView?.backgroundColor = .blue
    messageContainerView()
}

func messageContainerView() {

    let containerView = UIView()
    containerView.backgroundColor = .green
    containerView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(containerView)

    let messageTextField = UITextField()
    messageTextField.placeholder = "Enter a message"
    messageTextField.translatesAutoresizingMaskIntoConstraints = false
    containerView.addSubview(messageTextField)

    let sendMessageButton = UIButton()
    sendMessageButton.setTitle("Send", for: .normal)
    sendMessageButton.translatesAutoresizingMaskIntoConstraints = false
    containerView.addSubview(sendMessageButton)

    // MARK: create line to separate the message box & messages
    let separatorLineView = UIView()     // https://www.youtube.com/watch?v=FDay6ocBlnE&list=PL0dzCUj1L5JEfHqwjBV0XFb9qx9cGXwkq&index=8&t=609s
    separatorLineView.backgroundColor = .black
    separatorLineView.translatesAutoresizingMaskIntoConstraints = false
    containerView.addSubview(separatorLineView)

    // MARK: Constraints
    let separatorTopLine = separatorLineView.topAnchor.constraint(equalTo: containerView.topAnchor)
    let separatorLeftLine = separatorLineView.leftAnchor.constraint(equalTo: containerView.leftAnchor)
    let separatorWidthLine = separatorLineView.widthAnchor.constraint(equalTo: containerView.widthAnchor)
    let separatorHeightLine = separatorLineView.heightAnchor.constraint(equalToConstant: 1)

    // Message container
    let containerViewLeft = containerView.leftAnchor.constraint(equalTo: view.leftAnchor)  // https://stackoverflow.com/questions/37370801/how-to-add-a-container-view-programmatically/40102513
    let containerViewRight = containerView.rightAnchor.constraint(equalTo: view.rightAnchor)
    let containerViewBottom = containerView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
    let containerViewWidth = containerView.widthAnchor.constraint(equalTo: view.widthAnchor)
    let containerViewHeight = containerView.heightAnchor.constraint(equalToConstant: 50)

    // Message textfield
    let messageFieldLeft = messageTextField.leftAnchor.constraint(equalTo: containerView.leftAnchor)
    let messageFieldRight = messageTextField.rightAnchor.constraint(equalTo: containerView.rightAnchor)
    let messageFieldCenter = messageTextField.centerYAnchor.constraint(equalTo: containerView.centerYAnchor)
    let messageFieldHeight = messageTextField.heightAnchor.constraint(equalTo: containerView.heightAnchor)
    let messageFieldWidth = messageTextField.widthAnchor.constraint(equalToConstant: 100)

    // Send message Button constraints
    let rightMessageButton = sendMessageButton.rightAnchor.constraint(equalTo: containerView.rightAnchor)
    let centerMessageButton = sendMessageButton.centerYAnchor.constraint(equalTo: containerView.centerYAnchor)
    let widthMessageButton = sendMessageButton.widthAnchor.constraint(equalToConstant: 80)
    let heightMessageButton = sendMessageButton.heightAnchor.constraint(equalTo: containerView.heightAnchor)

    NSLayoutConstraint.activate([separatorTopLine, separatorLeftLine, separatorWidthLine, separatorHeightLine, containerViewLeft, containerViewRight, containerViewWidth, containerViewHeight, containerViewBottom, rightMessageButton, centerMessageButton, widthMessageButton, heightMessageButton, messageFieldLeft, messageFieldRight,messageFieldCenter, messageFieldHeight, messageFieldWidth])

}

}
Shamas S
  • 7,507
  • 10
  • 46
  • 58
Terril320
  • 11
  • 1
  • 6
  • I think - I think! - you are mixing two ways to do your constraints. Your last line... `NSLayoutConstraint.activate([...])`... should contain an array (which it does), but not necessarily what you want. Try **removing** that line, along with **adding** `.isActive = true` to all your constraints above. (Have the syntax be `let myConstraint = myButton.[anchor].constraint(equalTo: [anchor]).isActive = true`.) –  Jun 11 '17 at 23:50
  • @dfd.Thank you for taking the time to answer. When I did that, I received the initialization warning for the constraints. – Terril320 Jun 12 '17 at 00:24

0 Answers0