【问题标题】:Programmatically setting layout constraints in a UICollectionViewCell以编程方式在 UICollectionViewCell 中设置布局约束
【发布时间】:2015-09-03 11:11:26
【问题描述】:

我有一个集合视图单元格,我试图在其中布局三个标签和一个图像。我的垂直布局似乎工作正常,但我似乎无法让水平布局达到可接受的状态——标签似乎不想像我想要的那样工作。

基本上,垂直尺寸是固定的,但我的单元格的水平尺寸会根据屏幕的宽度而变化,但通常在 320 左右。我希望图像处于固定位置,但 UILabels 到那时占用图像右侧的所有剩余空间。

我在下面添加了我预期布局的图片:

对于垂直布局,我有以下内容,其中标签是 l1 到 l3,图像是 i1:

将图像从顶部限制为 20px:

contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[i1(42)]", options: nil, metrics: nil, views: dictionaryOfViews))

在固定的 134 高度单元格中垂直约束标签:

contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[l1(21)][l2(21)]-10-[l3(42)]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))

然后我期望标签水平如下:

contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[i1(42)]", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-82-[l1]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-82-[l2]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-82-[l3]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))

这几乎可以工作。我必须设置以下内容才能使多行标签也起作用:

descriptionLabel.setContentCompressionResistancePriority(0, forAxis: .Horizontal)

但我遇到的问题是所有标签似乎仍然离左侧太远,并且在右侧留下了相当大的间隙,好像宽度没有动态调整?

任何关于我如何纠正的想法将不胜感激。

非常感谢。

【问题讨论】:

  • 我强烈建议您在 Interface builder 中设置约束,因为它可以自动检测模棱两可的约束。在这种情况下很难说。或者在笔尖中创建单元格并从那里加载。

标签: ios swift autolayout nslayoutconstraint visual-format-language


【解决方案1】:

这里只是一个想法...您是否尝试将标签的左侧设置为图像的右侧?

contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[i1]-20-[l1]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[i1]-20-[l2]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))
contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[i1]-20-[l3]-20-|", options: nil, metrics: nil, views: dictionaryOfViews))

【讨论】:

  • 嗨,谢谢。是的,我应该提到我尝试过......虽然不幸的是,我得到了相同的结果,只是右边的空间有点太大......几乎就像它的单元格大小错误......
猜你喜欢
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2013-06-23
  • 2012-10-01
  • 2018-04-08
  • 1970-01-01
相关资源
最近更新 更多