【发布时间】:2017-09-15 11:58:48
【问题描述】:
那就是一个UIView,里面有一个UIImageView和一个UILabel。一些注意事项:
- 图像应始终为 1:1
- 图片高度应与标签高度一致
- 如果标签中的文本变宽,视图也应该变宽。
- 视图的高度应该适应标签的高度,所以我没有设置 UIView 的任何高度限制。
- 请参阅此 github 项目以获取我想要的示例:https://github.com/Jasperav/constrains
这是我的代码,你可以复制粘贴它,但请确保为 UIImageView 的图像设置其他字符串:
class View2: UIView{
override init(frame: CGRect) {
super.init(frame: frame)
load()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
load()
}
func load(){
let overlappingView = UIView()
overlappingView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(overlappingView)
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "0"
label.textColor = .white
label.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 751), for: .horizontal)
label.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 999), for: .vertical)
label.setContentHuggingPriority(UILayoutPriority(rawValue: 999), for: .vertical)
label.setContentHuggingPriority(UILayoutPriority(rawValue: 999), for: .horizontal)
let image = UIImageView()
image.image = UIImage(named: "Test")
image.translatesAutoresizingMaskIntoConstraints = false
image.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 1), for: .horizontal)
image.setContentCompressionResistancePriority(UILayoutPriority(rawValue: 1), for: .vertical)
image.setContentHuggingPriority(UILayoutPriority(rawValue: 1), for: .vertical)
image.setContentHuggingPriority(UILayoutPriority(rawValue: 1), for: .horizontal)
overlappingView.addSubview(label)
overlappingView.addSubview(image)
overlappingView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
overlappingView.centerYAnchor.constraint(equalTo: self.centerYAnchor, constant: -2).isActive = true
overlappingView.widthAnchor.constraint(greaterThanOrEqualTo: self.widthAnchor, multiplier: 0.6).isActive = true
label.topAnchor.constraint(equalTo: overlappingView.topAnchor, constant: 5).isActive = true
label.bottomAnchor.constraint(equalTo: overlappingView.bottomAnchor, constant: -5).isActive = true
label.trailingAnchor.constraint(equalTo: overlappingView.trailingAnchor, constant: -5).isActive = true
label.heightAnchor.constraint(equalTo: image.heightAnchor, multiplier: 1).isActive = true
image.centerYAnchor.constraint(equalTo: overlappingView.centerYAnchor).isActive = true
image.leadingAnchor.constraint(equalTo: overlappingView.leadingAnchor, constant: 2).isActive = true
image.widthAnchor.constraint(equalTo: image.heightAnchor, multiplier: 1).isActive = true
image.trailingAnchor.constraint(equalTo: label.trailingAnchor, constant: -10).isActive = true
}
}
使用此代码,我看到图像以 1:1 的大小占据了整个屏幕的高度。为什么它不尊重标签高度?我在界面生成器中有相同的约束,为什么它在代码中不起作用?
谢谢。
【问题讨论】:
标签: ios swift autolayout