swift - 以编程方式添加负约束
问题描述
为什么我必须给我的rigthAnchor
约束一个负值才能titleLabel
从视图的右侧留出 28 个边距。如果我只是给它正值,它会超出视图 28 个像素。
private func setupLayout() {
view.addSubview(imageView)
view.addSubview(titleLabel)
// *** imageView ***
if #available(iOS 11.0, *) {
imageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 116).isActive = true
} else {
imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 116).isActive = true
}
imageView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
imageView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
imageView.heightAnchor.constraint(equalToConstant: 224).isActive = true
// *** titleLabel ***
titleLabel.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 25).isActive = true
titleLabel.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -28).isActive = true
titleLabel.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 28).isActive = true
}
解决方案
因为按照这个
titlelbl.right = view.right - 28
和说的一样
view.right = titlelbl.right + 28
firstItem.anchor = seconfItem.anchor * 乘数 +/- 常数
转变为
titleLabel.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -28).isActive = true
或者
view.rightAnchor.constraint(equalTo: titleLabel.rightAnchor, constant: 28).isActive = true
如果你不喜欢负值
编辑:
-28 时约束的含义
您正在告诉自动布局将 titlelbl 的最大 x 值设置为等于视图的最大 x 值减去 28
| - 磅 + 28 - |
但是+28
| - lbl - | + 28 <<< 视野外最大 x
推荐阅读
- javascript - 如何 - 报价幻灯片
- node.js - Sails-mongo 不使用 MongoDB Atlas URI
- domain-driven-design - Axon 框架中聚合成员上的 EntityId 注释
- java - JAVA中的两次相加
- android - 如何在 android Studio 中获取链接到我的 textView 的 URL?
- html - html 标签在窄视口上停止全宽
- typescript - 使用类验证器库进行隐式属性验证
- azure - 从 Kubernetes Pod 调用时 Azure Keyvault 错误请求
- android - Flutter async/await 在 forEach 中不起作用
- python - Python --inspect-brk 类似物