【发布时间】:2020-12-22 22:47:53
【问题描述】:
我想创建一个聊天底栏,内容如下,水平UIStackView:
-
UITextField在左侧,占用所有可用空间 - 右侧的标签具有固定大小(默认固有内容大小)
这是我的代码:
let messageTextField = UITextField()
messageTextField.translatesAutoresizingMaskIntoConstraints = false
messageTextField.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
messageTextField.setContentHuggingPriority(.defaultHigh, for: .horizontal)
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "SEND"
label.setContentHuggingPriority(.defaultLow, for: .horizontal)
label.setContentCompressionResistancePriority(.required, for: .horizontal)
label.textColor = .red
let sv = UIStackView()
sv.axis = .horizontal
sv.distribution = .fill
sv.alignment = .center
sv.translatesAutoresizingMaskIntoConstraints = false
// constraint the stack view to the bottomBar view
bottomBar.addSubview(sv)
NSLayoutConstraint.activate([
sv.leadingAnchor.constraint(equalTo: bottomBar.leadingAnchor, constant: 20),
sv.trailingAnchor.constraint(equalTo: bottomBar.trailingAnchor, constant: -20),
sv.bottomAnchor.constraint(equalTo: bottomBar.bottomAnchor, constant: -8),
sv.topAnchor.constraint(equalTo: bottomBar.topAnchor, constant: 8)
])
sv.addArrangedSubview(messageTextField)
sv.addArrangedSubview(label)
NSLayoutConstraint.activate([
messageTextField.heightAnchor.constraint(equalTo:sv.heightAnchor),
// I didn't put any width constraint for textField because it make no sense, as I want it to take all the available space on the right
])
使用此代码,标签正在扩大其大小并填充右侧的所有可用空间,并且文本字段未显示(检查器说宽度 = 0);与我想要的完全相反。
我不明白为什么它不起作用,因为我明确配置了它,所以它不会扩展标签:
label.setContentHuggingPriority(.defaultLow, for: .horizontal)
改为使用以下方式扩展文本字段:
messageTextField.setContentHuggingPriority(.defaultHigh, for: .horizontal)
我在这里错过了什么?我已经阅读了许多 SO 答案、Apple 文档,并遵循了各种教程和视频,但我无法实现这个看似简单的事情。
【问题讨论】:
-
您是否尝试通过注释掉 sv.distribution = .fill 和 sv.alignment = .center 来保留堆栈视图的默认值?默认情况下应该都是“填充”
-
刚刚尝试过,但正如您指出的那样,这些是默认值,因此无法解决问题:/
标签: swift autolayout uistackview