Я пытаюсь анимировать ограничение ширины UITextfield
, которое у меня есть, и я пытаюсь получить поле UITextfield от ширины 0 до ширины X во время анимации.
Это то, что у меня до сих пор:
let MAX_SEARCH_BAR_WIDHT: CGFloat = 285
var searchBarWidth: CGFloat = 0
private func setupSearchBar() {
addSubview(searchBar)
NSLayoutConstraint.activate([
searchBar.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor, constant: 8),
searchBar.trailingAnchor.constraint(equalTo: searchBtn.leadingAnchor, constant: -8),
searchBar.heightAnchor.constraint(equalToConstant: 30),
searchBar.widthAnchor.constraint(equalToConstant: searchBarWidth),
])
}
Здесь я пытаюсь оживить поле UITextfield:
func handleSearch() {
mView.isSearchingAlready = !mView.isSearchingAlready
UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseInOut, animations: {
self.mView.searchBarWidth += self.mView.MAX_SEARCH_BAR_WIDHT
self.mView.layoutIfNeeded()
}, completion: nil)
}
HandleSearch вызывается, когда я нажимаю кнопку поиска. при нажатии кнопки поле UITextfield не отображается. Это поле UIText:
let searchBar: UITextField = {
let field = UITextField(frame: CGRect(x: 0, y: 0, width: 1, height: 0))
field.backgroundColor = .appWhite
field.tintColor = UIColor.clear
field.translatesAutoresizingMaskIntoConstraints = false
field.layer.cornerRadius = 15
field.isHidden = false
let padding = UIView(frame: CGRect(x: 0, y: 0, width: 8, height: 1))
field.leftView = padding
field.leftViewMode = .always
field.rightView = padding
field.rightViewMode = .always
field.attributedPlaceholder = NSAttributedString(string: NSLocalizedString("searchbar.placeholder", comment: "find"), attributes: [NSAttributedString.Key.foregroundColor: UIColor.init(hexString: "#080708", alpha: 0.5)])
return field
}()
1 ответ
Вы должны изменить постоянное значение ограничения, поэтому создайте var
var widthCon:NSLayoutConstraint!
Получите ограничение ширины из блока активации
widthCon = searchBar.widthAnchor.constraint(equalToConstant: searchBarWidth)
widthCon.isActive = true
Затем
func handleSearch() {
mView.isSearchingAlready = !mView.isSearchingAlready
self.mView.widthcon.constant = self.mView.MAX_SEARCH_BAR_WIDHT
UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseInOut, animations: {
self.view.layoutIfNeeded()
}, completion: nil)
}
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.