gpt4 book ai didi

swift - 在具有约束的 UIView 中移动 UITextField

转载 作者:行者123 更新时间:2023-11-28 14:22:18 25 4
gpt4 key购买 nike

我正在制作一个应用程序,用户可以在其中输入他们的汽车信息。我需要 UITextFields 向上移动,这样它们就不会被键盘覆盖。我用这段代码做到了这一点。

func textFieldDidBeginEditing(_ textField: UITextField)
{
if make==textField
{
self.infoContainer.frame = self.infoContainer.frame.offsetBy(dx: 0, dy:-50)
}
if model==textField
{
self.infoContainer.frame = self.infoContainer.frame.offsetBy(dx: 0, dy:-75)
}
if color==textField
{
self.infoContainer.frame = self.infoContainer.frame.offsetBy(dx: 0, dy:-100)
}
}

在我将约束添加到 UIView *infoContainer 之前,效果很好。那么它只会工作一次。就像我点击制作它会向上移动 -50,或者如果我点击颜色它会向上移动 -100。但是在那之后它就不会再移动了。就像我点击 Make 它会向上移动 -50,但是如果我点击 Color 它不会移动到 -100。所以我试着改变约束。

func textFieldDidBeginEditing(_ textField: UITextField)
{
if make==textField
{
infoContainer.translatesAutoresizingMaskIntoConstraints = false

self.view.addSubview(infoContainer)

let leadingConstraint = infoContainer.leadingAnchor.constraint(equalTo: self.view.leadingAnchor)
let trailingConstraint = infoContainer.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
let topConstraint = infoContainer.topAnchor.constraint(equalTo: self.view.topAnchor, constant: -50)
let bottomConstraint = infoContainer.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -50)

initialConstraints.append(contentsOf: [leadingConstraint,trailingConstraint,topConstraint,bottomConstraint])

NSLayoutConstraint.activate(initialConstraints)
}
if model==textField
{
infoContainer.translatesAutoresizingMaskIntoConstraints = false

self.view.addSubview(infoContainer)

let leadingConstraint = infoContainer.leadingAnchor.constraint(equalTo: self.view.leadingAnchor)
let trailingConstraint = infoContainer.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
let topConstraint = infoContainer.topAnchor.constraint(equalTo: self.view.topAnchor, constant: -75)
let bottomConstraint = infoContainer.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -75)

initialConstraints.append(contentsOf: [leadingConstraint,trailingConstraint,topConstraint,bottomConstraint])

NSLayoutConstraint.activate(initialConstraints)
}
if color==textField
{
infoContainer.translatesAutoresizingMaskIntoConstraints = false

self.view.addSubview(infoContainer)

let leadingConstraint = infoContainer.leadingAnchor.constraint(equalTo: self.view.leadingAnchor)
let trailingConstraint = infoContainer.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
let topConstraint = infoContainer.topAnchor.constraint(equalTo: self.view.topAnchor, constant: -100)
let bottomConstraint = infoContainer.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -100)

initialConstraints.append(contentsOf: [leadingConstraint,trailingConstraint,topConstraint,bottomConstraint])

NSLayoutConstraint.activate(initialConstraints)
}
}

这样效果好一些。如果我点击让它向上移动 -50,然后模型向上移动 -75,然后颜色向上移动 -100。但随后它不会向下移动,就像我再次单击 Make 它不会向下移动到 -50 一样。我什至将颜色设置为 +50。当我单击颜色时,它会下降 +50,然后当我单击“制作”时,它会向上移动到 -50,而模型会将它向上移动 -75。但如果我再次单击颜色,它不会回落到 +50。我哪里错了?

最佳答案

问题是你每次移动都添加约束,这随着时间的推移会产生冲突,所以你只需要添加一次约束,并调整你想要移动的约束的常量值,而不是这样做

1- 在 viewDidLoad 中添加这段代码

var bottomConstraint:NSLayoutConstraint!

//

infoContainer.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(infoContainer)
let leadingConstraint = infoContainer.leadingAnchor.constraint(equalTo: self.view.leadingAnchor)
let trailingConstraint = infoContainer.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)
let topConstraint = infoContainer.topAnchor.constraint(equalTo: self.view.topAnchor, constant: -50)
bottomConstraint = infoContainer.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -50)
initialConstraints.append(contentsOf: [leadingConstraint,trailingConstraint,topConstraint,bottomConstraint])
NSLayoutConstraint.activate(initialConstraints)

2-

func textFieldDidBeginEditing(_ textField: UITextField)
{
if make == textField
{
self.bottomConstraint.constant = -50
}
if model == textField
{
self.bottomConstraint.constant = -75
}
if color == textField
{
self.bottomConstraint.constant = -100
}

self.view.layoutIfNeeded()

// you can animate it to

/*
UIView.animate(withDuration:0.5) {
self.view.layoutIfNeeded()
} */
}

如果你愿意,你可以用topConstraint做同样的事情

关于swift - 在具有约束的 UIView 中移动 UITextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51829484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com