I have a UITextView created programmatically in swift and this is what I have in my viewDidLoad() for my controller.
let isPortrait = UIInterfaceOrientationIsPortrait(UIApplication.shared.statusBarOrientation)
if isPortrait {
searchTextView.widthAnchor.constraint(equalToConstant: view.frame.width * 0.7).isActive = true
} else {
searchTextView.widthAnchor.constraint(equalToConstant: view.frame.width * 0.1).isActive = true
}
This is how the searchTextView is setup
func setupView() {
self.layer.cornerRadius = 8.0
self.translatesAutoresizingMaskIntoConstraints = false
self.textContainerInset = UIEdgeInsets(top: 12, left: 10, bottom: 0, right: 10)
self.textContainer.maximumNumberOfLines = 1
self.textContainer.lineBreakMode = .byTruncatingHead
self.autocorrectionType = .no
self.text = ""
self.font = Constants.fonts().largeFont
self.backgroundColor = UIColor.white
self.adjustsFontForContentSizeCategory = true
self.textColor = UIColor.black
self.layer.borderColor = UIColor.gray.cgColor
self.layer.borderWidth = 0.25
// Need clipsToBounds = false to show shadow
self.clipsToBounds = false
self.layer.shadowRadius = 20.0
self.layer.shadowColor = UIColor.gray.cgColor
self.layer.shadowOffset = CGSize(width: 2.0, height: 2.0)
self.layer.shadowOpacity = 0.5
self.tintColor = Constants.colors().primaryLightColor
}
This gives searchTextView a different widthAnchor based on the device orientation. This works fine, however, later I check when the device orientation is going to change and remove and add the corresponding widthAnchors.
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
sideMenuLauncher.dismissSideMenu(duration: 0)
let toPortraitMode = self.view.frame.size.width > size.width
searchTextView.widthAnchor.constraint(equalToConstant: view.frame.width * 0.7).isActive = toPortraitMode
searchTextView.widthAnchor.constraint(equalToConstant: size.width * 0.1).isActive = !toPortraitMode
for constraint in view.constraints {
print("\(constraint)\n")
}
searchTextView.updateConstraints()
searchTextView.layoutIfNeeded()
}
But this does not actually deactivate any constraints, as it says in this console output:
(
"<NSLayoutConstraint:0x60c000896170 PickupApp.SearchBarView:0x7f7ee1016a00.width == 56.8 (active)>",
"<NSLayoutConstraint:0x604000c9c6b0 PickupApp.SearchBarView:0x7f7ee1016a00.width == 397.6 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x604000c9c6b0 PickupApp.SearchBarView:0x7f7ee1016a00.width == 397.6 (active)>
I can't figure out why these constraints are not being deactivated even though constraints are being added.