【问题标题】:Constrains for ImageView is not workingImageView 的约束不起作用
【发布时间】:2016-10-18 05:54:25
【问题描述】:

我已将AutoLayout 与我的UICollectionView 之一一起使用,我正面临imageView 的高度和宽度问题。我在UICollectionViewCell 中添加了UIImageView,如下约束。

UICollectionViewDataSource 方法。

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 100
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

    var width = Int((collectionView.frame.size.width - 30) / 4)
    if width % 2 != 0 {
        width += 1
    }        
    return CGSize(width: CGFloat(width), height: CGFloat(width))
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CustomCell
    print("Cell Size - \(cell.bounds)")
    print("ImageView Size - \(cell.imageView.frame)")
    return cell
}

但是当我运行它时,ImageView 总是与 70X70 一起出现,无论我将在哪个设备上运行,但 UICollectionViewCell 的大小在不同的设备上会增加和减少。

在 iPhone 6 上如下所示。

我已将UIImageViewbackgroundColor 设置为UICollectionViewCell 的白色和红色,以便击球手了解Cell 和ImageView Size 的控制台日志如下。

Cell Size - (0.0, 0.0, 86.0, 86.0)
ImageView Size - (5.0, 5.0, 70.0, 70.0)
Cell Size - (0.0, 0.0, 86.0, 86.0)
ImageView Size - (5.0, 5.0, 70.0, 70.0)

请任何人帮助我为什么 imageView 的大小没有根据UICollectionViewCell 增加或减少。任何帮助将不胜感激。

【问题讨论】:

  • 为什么 x 和 y ...我认为没有必要?
  • @EICaptainv2.0 我已经尝试过不使用它,但它不会工作。
  • 我看到这个尺寸等级在你的故事板中被选中。如果你选择全部,你还能看到约束吗?
  • @CarienvanZyl 不明白你想说什么。
  • 在约束部分,在约束的可视化表示下方,有一个段控件,位于 All 和 This Size Class 之间。如果您仅为此尺寸类定义约束,它们也不会应用于其他尺寸类。如果您打开约束,则不会检查已安装,而是检查一个大小等级,例如。可以检查 wR hC。见developer.apple.com/library/content/documentation/…

标签: ios uiimageview autolayout uicollectionview uicollectionviewcell


【解决方案1】:

在集合视图的大小检查器中,将估计大小设置为无

【讨论】:

  • 多么简单!但是花了好几个小时才找到它。
【解决方案2】:

经过一番研究,我想出了以下方法来解决AutoLayoutUICollectionViewCell 的这个问题。从 Xcode 6 开始,CollectionViewCell 没有在界面生成器中显示contentView,因此在单元格的awakeFromNib 中我设置了它的autoresizingMask,它就像魅力一样工作。

class CustomCell: UICollectionViewCell {
  @IBOutlet
  var imageView: UIImageView!

    override func awakeFromNib() {
      super.awakeFromNib()
      //Below line solved my problem
      self.contentView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
    }
}

【讨论】:

    【解决方案3】:

    你需要设置约束如下截图;

    【讨论】:

    • 我已经添加了上下左右5个空格的这些约束,再次检查问题。
    • 是的,这是约束问题,因此您需要删除所有现有约束并仅设置 4 个约束,如上图所示。
    • 你必须在哪条评论中解释这一点?
    • 阅读第一个问题,这已经由 El capitan 提出,我也对此作出了答复。
    【解决方案4】:

    水平居中和垂直居中当为您的图像视图提供固定到父级所有边(顶部、底部、前导和尾随)时,不应存在约束。

    移除中心水平和垂直中心约束 或顶部、底部、前导和尾随,并赋予相等的宽度和高度作为父级以及垂直和水平中心y。

    似乎删除中心水平和垂直中心约束肯定会解决你的问题,试试看。

    希望对您有所帮助。 祝你好运。

    【讨论】:

    • 我已经试过这个检查问题的第二条评论。
    • 我已经尝试过等宽和等高,唯一能帮助我的解决方案是为 collectionViewCell 的 contentView 设置 autoresizingMask。
    • 哦,无论如何,终于找到了解决方案。这才是最重要的:)
    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 2018-12-30
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多