ios - 我正在尝试以编程方式创建 UI,但滚动视图和文本视图无法正常工作
问题描述
我有一个带有滚动视图的 UIViewController,一个以编程方式添加了字段的内容视图。文本视图已禁用滚动。随着用户键入文本视图的大小会增加,但不会向上移动到键盘上方。滚动也没有滚动正确的视图。请检查附件项目。
extension ScrollViewController: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
let fixedWidth = textView.frame.size.width
var newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
if newSize.height < 200 {
newSize.height = 200
}
textView.frame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
if let constraint = (body.constraints.filter { $0.firstAttribute == .height }.first) {
constraint.constant = newSize.height
}
textView.layoutIfNeeded()
}
}
约束代码:
func addConstraints() {
// scroll view
NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: 8.0),
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8.0),
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8.0),
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -8.0)
])
// content view
NSLayoutConstraint.activate([
contentView.topAnchor.constraint(equalTo: view.topAnchor),
contentView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
contentView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
contentView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
contentView.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 1.0)
])
// title text field
NSLayoutConstraint.activate([
titleText.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 100),
titleText.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 8.0),
titleText.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8.0),
titleText.bottomAnchor.constraint(equalTo: body.topAnchor, constant: -8.0),
titleText.heightAnchor.constraint(equalToConstant: 31)
])
// body text view
NSLayoutConstraint.activate([
body.topAnchor.constraint(equalTo: titleText.bottomAnchor, constant: 8.0),
body.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 8.0),
body.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8.0),
body.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -40),
body.heightAnchor.constraint(equalToConstant: 200)
])
}
解决方案
推荐阅读
- batch-file - 满足“IF NOT %reply% ==”条件时,Windows Shell 脚本无 ECHO
- python - 没有代表给定数量的可能总和
- sql-server - 经典 ASP Server 和 SQL Server 之间的性能
- elasticsearch - Elasticsearch date_range 聚合性能基准
- java - 每个最后一个不工作的 Spring Thymeleaf
- c# - 替代快速截取窗口的屏幕截图
- java - 如何在杰克逊映射器的帮助下使用单个 JSON 文件创建多种类型的 java 对象?
- javascript - JavaScript - 将抽认卡创建为 PDF
- ios - 在具有多个表视图的视图控制器中删除 UITableView 行(Swift)
- java - 在 Java Swing 中刷新现有窗口