我对单元格使用自动高度。每次我想用新数据(这里是模型变量)更新我的单元格时,我都会更新我的自动布局约束,但出现错误。在这里只是为了说明这个问题,我什至没有改变约束。我只是要求重新计算布局。
在单元格的第一次初始化时:没有警告,没问题。
错误:
<NSLayoutConstraint:0x174285d70 'UIView-Encapsulated-Layout-Height'
UITableViewCellContentView:0x1030f8a50.height == 500 (active)>
Run Code Online (Sandbox Code Playgroud)
编码:
tableView.rowHeight = UITableViewAutomaticDimension
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 500
}
class TestTableViewCell: UITableViewCell {
var model: X? {
didSet {
setNeedsLayout()
layoutIfNeeded()
}
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier) …Run Code Online (Sandbox Code Playgroud) 我想在Swift中使用SnapKit将UIView做成矩形,像这样
lazy var customView: UIView = {
let view = UIView(frame: CGRect())
self.addSubview(view)
view.snp.makeConstraints({ (make) in
make.left.top.bottom.equalToSuperview().inset(self.inset)
make.width.equalTo(make.height) // Error in this line
})
return view
}()
Run Code Online (Sandbox Code Playgroud) 我试图在 SnapKit 中创建此布局的约束,但我很难设置最大大小 (lessThanOrEqual)。

let maxWidthContainer: CGFloat = 435
let maxHeightContainer: CGFloat = 600
containerView.snp.makeConstraints {
$0.width.equalTo(containerView.snp.height).multipliedBy(maxWidthContainer / maxHeightContainer)
$0.centerX.centerY.equalToSuperview()
$0.leading.trailing.equalToSuperview().inset(38).priorityLow()
}
Run Code Online (Sandbox Code Playgroud) 我正在为iOS 11的应用程序进行一些更新,并遇到了一些我无法理解的问题.我的视图控制器以编程方式创建其所有子视图.
第一个孩子是Imageview.最重要的是,我添加了一个UIScrollView.在滚动视图中有一个UIView,在其中有一个标签.我通过代码使用SnapKit进行Autolayout约束.
iOS 9和iOS 10运行良好 - 没有问题.但是,在iOS 11中,它似乎工作正常,直到我"滚动"滚动视图.它没有像iOS 9和10那样弹回原来的位置,而是向下滚动,好像插图大约是实际的2倍.
// Scroll View
myScrollView = UIScrollView()
myScrollView.contentInset = UIEdgeInsetsMake(scrollInsetHeight(), 0, 0, 0)
myScrollView.backgroundColor = barBackgroundColor
myScrollView.isUserInteractionEnabled = true
self.view.addSubview(myScrollView)
myScrollView.snp.makeConstraints {
make in
make.edges.equalTo(self.view)
}
// Content View
contentView = UIView()
contentView.isUserInteractionEnabled = true
myScrollView.addSubview(contentView)
contentView.snp.makeConstraints {
make in
make.edges.equalTo(myScrollView)
make.width.equalTo(self.view)
}
// Label
let lbl = UILabel()
lbl.text = "..."
lbl.font = UIFont(name: "OpenSans", size: 17)
lbl.textColor = .white
lbl.numberOfLines = 0
contentView.addSubview(lbl)
lbl.snp.makeConstraints {
make in …Run Code Online (Sandbox Code Playgroud) 我尝试了使用 Snapkit 制作灯光动画的不同教程,但似乎没有任何帮助。我什至尝试过 Spring 框架,但效果不佳。这是我的代码。
private func setupMatchView() {
view.addSubview(matchOverlayView)
matchOverlayView.snp.makeConstraints { (make) in
make.top.equalTo(view.safeAreaLayoutGuide.snp.topMargin)
make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottomMargin)
make.left.equalToSuperview()
make.right.equalToSuperview()
}
matchOverlayView.backgroundColor = UIColor.white.withAlphaComponent(0.5)
view.addSubview(matchView)
matchView.snp.makeConstraints { (make) in
make.left.equalToSuperview().offset(32)
make.right.equalToSuperview().inset(32)
make.centerX.equalToSuperview()
make.centerY.equalToSuperview()
}
matchView.backgroundColor = .white
matchView.layer.cornerRadius = 8
matchView.dropShadow()
matchView.addSubview(matchYourImageView)
matchYourImageView.snp.makeConstraints { (make) in
make.height.width.equalTo(100)
make.centerX.equalToSuperview().inset(20)
make.top.equalToSuperview().offset(40)
}
matchYourImageView.backgroundColor = UIColor(red:0.77, green:0.77, blue:0.77, alpha:1.00)
matchYourImageView.layer.cornerRadius = 50
matchYourImageView.clipsToBounds = true
matchView.addSubview(matchHerImageView)
matchHerImageView.snp.makeConstraints { (make) in
make.height.width.equalTo(100)
make.centerX.equalToSuperview().inset(-20)
make.top.equalTo(matchYourImageView.snp.top)
}
matchHerImageView.backgroundColor = UIColor(red:0.69, green:0.69, blue:0.69, alpha:1.00)
matchHerImageView.layer.cornerRadius = 50
matchHerImageView.clipsToBounds = …Run Code Online (Sandbox Code Playgroud) 现在如果我想将左侧和右侧的边距设置为相等,则需要两行:
label.snp.makeConstraints { make in
make.left.equalTo(Constants.margin)
make.right.equalTo(-Constants.margin)
}
Run Code Online (Sandbox Code Playgroud)
API 还允许我使用以下命令一次设置所有 4 个(左/右/上/下)边缘:
label.snp.makeConstraints { make in
make.edges.equalTo(Constants.margin
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能编写一个允许这样的扩展?
label.snp.makeConstraints { make in
make.horizontalMargins.equalTo(Constants.margin)
}
Run Code Online (Sandbox Code Playgroud)
结果应等于第一个代码片段。
我目前正在构建一个可重用的视图,它利用 UITableView 为其单元格提供的动态调整大小。
我想要实现的是根据在结构中定义的 size 属性中给定的大小为单元格内的视图提供宽度和高度,我在设置后使用配置函数传递它视图的大小。
然后我将它放在 xAxis 的中心,并使用结构中的一个属性在视图周围应用任何边距,该属性只是一个 UIEdgeInset 属性。使用 SnapKit 库,这看起来像这样。
if let formImageItem = formImageItem,
let size = formImageItem.size {
formItemImgVw = UIImageView(frame: CGRect(x: 0, y: 0, width: size.width, height: size.height))
formItemImgVw?.image = formImageItem.image
formItemImgVw?.contentMode = formImageItem.aspectFit
contentView.addSubview(formItemImgVw!)
formItemImgVw?.snp.makeConstraints({ (make) in
make.size.equalTo(CGSize(width: size.width, height: size.height))
make.top.equalTo(formImageItem.margin.top)
make.bottom.equalTo(formImageItem.margin.bottom)
make.centerX.equalToSuperview()
})
}
Run Code Online (Sandbox Code Playgroud)
我似乎遇到的问题是我收到以下警告。
2018-10-12 14:57:34.101532+0100 xxxx Dev[6104:2160548] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. …Run Code Online (Sandbox Code Playgroud) 看似简单的事情,其实做起来真的很难。我已经在这里和 SnapKit GitHub 上浏览了多个主题,但未能解决我的问题。
我想要UITableViewCell一个位于中间的标签,让我们从单元格的顶部和底部说 50。
值得一提的是,单元格是以编程方式创建的
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.addSubview(titleLabel)
titleLabel.snp.makeConstraints { (make) -> Void in
make.topMargin.equalToSuperview().offset(50.0)
make.left.equalToSuperview().inset(UIView.getValueScaledByScreenWidthFor(baseValue:10.0))
make.bottomMargin.equalToSuperview().offset(50.0)
}
}
Run Code Online (Sandbox Code Playgroud)
在 ViewController 中,我尝试了两种自动单元格高度的方法:
extension EpisodeViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
}
Run Code Online (Sandbox Code Playgroud)
和
tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad()方法中
我得到的是:
这三个单元格中的每一个都应填充“测试” - 相反,它在不调整单元格大小的情况下将标签向下推到相应单元格下方。
尝试了许多不同的组合,例如:
1) 将约束优先级设置为 999 - 没有变化
2) 添加到 contentView 而不是 self - 根本不显示
3) …
我试图以编程方式创建一个按钮并使用SnapKit应用约束.一切正常,但当我应用约束,因为make.center.equalTo(self.view)
它崩溃给我这条消息"终止应用程序由于未捕获的异常无法安装约束,原因:视图之间没有共同的超级视图".这是我创建按钮的代码:
func createButton() {
let button = UIButton(type: UIButtonType.System) as UIButton
button.backgroundColor = UIColor.greenColor()
button.setTitle("Test Button", forState: UIControlState.Normal)
button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
button.snp_makeConstraints { (make) -> Void in
make.width.equalTo(200)
make.height.equalTo(70)
make.center.equalTo(self.view)
}
self.view.addSubview(button)
}
Run Code Online (Sandbox Code Playgroud) 如何使用snapkit在超级视图中垂直居中放置UIImageView?我这样尝试过:
imageview.snp.makeConstraints { (make) in
make.centerY.equalTo(view.center.y);
}
Run Code Online (Sandbox Code Playgroud)
但似乎不太好。我该如何使用snapkit