我遇到了一个问题,我不明白,也无法解决。当textField被激活时,键盘上的数字按钮被按下时会显示键盘,我的stackView位于屏幕中间,应该隐藏,我的tableView应该上升,从headView缩进36点。当我删除textField中的文本时,所有的东西都应该回到屏幕截图中的标准视图。2我使用了UIKit编程,没有StoryBoard和SnapKit作为约束。3这里我应该使用什么方法?4 textField delegate还是UIView.animate {}还是smth。5你能帮我吗?
我的UITextField是greenColor,我将它设置为类似于视图,只是为了示例和演示。
final class HeaderView: UIView {
// There are contains UIImageView & UITextField
// UIImageView has yellow color in screenShot
// UITextField has green color in screenShot
..........
}
final class LeftView: UIView {
// Contains textLabel and IconImg
...........
}
final class RightView: UIView {
// Contains textLabel and IconImg
...........
}
并在我的UIViewController中调用它们:
final class ViewController: UIViewController {
private let headerLabel: UILabel = {
let label = UILabel()
label.font = .systemFont(ofSize: 17, weight: .semibold)
label.text = "Hello World!"
label.textColor = .black
return label
}()
// Calling my custom views
let headView = HeaderView()
let leftView = LeftView()
let rightView = RightView()
let stackView: UIStackView = {
let stackView = UIStackView()
stackView.axis = .horizontal
stackView.alignment = .center
stackView.distribution = .equalSpacing
return stackView
}()
// After that, I created UITableView
let tableView: UITableView = {
let tableView = UITableView(frame: .zero)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
return tableView
}()
// ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .systemBackground
tableView.delegate = self
tableView.dataSource = self
self.setupUI()
}
func setupUI() {
self.setSubviews()
self.setConstraints()
}
func setSubviews() {
self.view.addSubview(headerLabel)
self.view.addSubview(headView)
self.stackView.addArrangedSubview(leftView)
self.stackView.addArrangedSubview(rightView)
self.view.addSubview(stackView)
self.view.addSubview(tableView)
}
private func setConstraints() {
headerLabel.snp.makeConstraints { make in
make.top.equalTo(self.view.safeAreaLayoutGuide).offset(30)
make.centerX.equalTo(self.view.safeAreaLayoutGuide)
}
headView.snp.makeConstraints { make in
make.top.equalTo(self.headerLabel.snp.bottom).offset(24)
make.leading.equalTo(self.view.safeAreaLayoutGuide).offset(16)
make.trailing.equalTo(self.view.safeAreaLayoutGuide).offset(-16)
make.height.equalTo(56)
}
stackView.snp.makeConstraints { make in
make.top.equalTo(self.headView.snp.bottom).offset(16)
make.leading.trailing.equalToSuperview().inset(16)
}
leftView.snp.makeConstraints { make in
make.top.equalTo(self.stackView.snp.top)
make.leading.equalTo(self.stackView.snp.leading)
make.bottom.equalTo(self.stackView.snp.bottom)
make.size.equalTo(CGSize(width: 163, height: 88))
}
rightView.snp.makeConstraints { make in
make.top.equalTo(self.stackView.snp.top)
make.trailing.equalTo(self.stackView.snp.trailing)
make.bottom.equalTo(self.stackView.snp.bottom)
make.size.equalTo(CGSize(width: 163, height: 88))
}
tableView.snp.makeConstraints { make in
make.top.equalTo(self.stackView.snp.bottom).offset(36)
make.leading.trailing.equalTo(self.view.safeAreaLayoutGuide)
make.bottom.equalTo(self.view.safeAreaLayoutGuide)
}
}
}
extension UIViewController: UITableViewDelegate, UITableViewDataSource {
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "Hello"
return cell
}
}
[![在此输入图像说明][1]][1]
1条答案
按热度按时间qxgroojn1#
要在文本字段中键入文本或数字时隐藏UIView,必须像向UIButton添加目标一样向UIText字段添加目标,但是,对于UIText字段,必须更改UIControl.Event(. editingChanged)。
例如:
这段代码将在UITextfield中键入字符时隐藏视图。