我有一个标签和一个文本输入,当用户加载初始页面时,标签位于文本输入框的顶部。当用户单击标签时,我希望标签在文本框上方向上移动,并减小标签中文本的磅值。然后,用户可以在文本框中键入文本。如果用户未在文本框中键入任何内容并单击页面上的其他位置,则标签将向下移到文本框上方,并将文本大小设置回原始大小(此部分有效)
要执行转换,我试图重置标签顶部自动约束和标签顶部自动约束的常量值。运行动画时,标签会正确地向上移动到文本框上方的正确位置,但是,由于我将其转换为标签原始大小的75%,因此标签会居中,从而使现在较小的标签移至而不是像我想要的那样固定在左侧边缘。
func textFieldDidBeginEditing(_ textField: UITextField) {
guard let thisItem = item as? CardInfoTextInputViewModelItem else {
return
}
if let labelText = formLabel.text, let placeHolderText = thisItem.placeHolderValue {
if labelText == placeHolderText {
formLabel.text = thisItem.label
textField.text = "" // blank out the text field
formLabelTop.constant = 20
formLabelLeading.constant = 0
performAnimation(transform: CGAffineTransform(scaleX: 0.75, y: 0.75))
}
}
}
/*
* done editing text field
*/
func textFieldDidEndEditing(_ textField: UITextField) {
guard let thisItem = item as? CardInfoTextInputViewModelItem else {
return
}
if let text = textField.text, text.isEmpty {
formLabel.text = thisItem.placeHolderValue
formLabelTop.constant = 38
formLabelLeading.constant = 16
performAnimation(transform: CGAffineTransform(scaleX: 1, y: 1))
}
}
// perform the animation
fileprivate func performAnimation(transform: CGAffineTransform) {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
self.formLabel.transform = transform
self.layoutIfNeeded()
}, completion: nil)
}
我不确定这是否是正确的方法,或者是否需要以其他方式处理。我想知道一旦标签在文本框上方被翻译后如何保持标签对齐。任何帮助,将不胜感激 谢谢 布莱恩