我正在使用集合视图来显示个人资料图片和人名的集合。所以我的单元格有一个UIImageView和一个UILabel作为子视图。我正在使用UICollectionViewDelegateFlowLayout方法:
collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
根据可用空间计算单元格的大小。
所有这一切都很好。我在单元格中为子视图添加了约束,以便它们也相应地调整大小。
我遇到的问题是我希望我的UIImageViews成为圆圈。在我应用该效果之前,似乎自动布局不会重新计算单元格的子视图大小。相反,当我为imageView计算cornerRadius时,它仍然说imageViews宽度是114.0(这是故事板中的内容),无论单元格有多大。这导致iPhone 5s上的圆圈,但在任何更大的设备上只有圆角。这是我的代码:
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("PersonCell", forIndexPath: indexPath)
configureCell(cell, atIndexPath: indexPath)
return cell
}
func configureCell(cell: UICollectionViewCell, atIndexPath indexPath: NSIndexPath) {
if let person = personAtIndexPath(indexPath) {
let imageView = cell.viewWithTag(100) as! UIImageView
let nameLabel = cell.viewWithTag(200) as! UILabel
cell.contentView.frame = cell.bounds
cell.contentView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
circularizeImageView(imageView)
imageView.image = person.profileImage
nameLabel.text = person.name
}
}
func circularizeImageView(imageView: UIImageView) {
imageView.layer.cornerRadius = (CGRectGetWidth(imageView.bounds) / 2)
imageView.clipsToBounds = true
imageView.layer.borderWidth = 2.0
imageView.layer.borderColor = UIColor.whiteColor().CGColor
}
我在几个地方看到以前子视图根本不会像这里一样调整大小:UICollectionView cell subviews do not resize
我不认为这是一个问题,但是我确实在我的代码中添加了修复程序,你可以在configureCell()中看到它,但它仍然没有帮助。
因此,在完成cellForItemAtIndexPath调用之后,这些子视图似乎不会调整大小。关于我如何解决这个问题的任何想法?请参见:rounded corners on UIImageViews instead of complete circles
的屏幕截图答案 0 :(得分:0)
不要使用viewWithTag()
,这是不好的做法。而是制作UILabel
和UIImageView
public
或取消范围修饰符。
UIImageView
是固定大小的吗?如果是这样,则每次重复使用单元格时都不需要调用circularizeImageView()
。而是在layoutSubviews()
子类中的UITableViewCell
中调用它。这也会为您提供imageView.bounds.height