首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >适合标签的CollectionView单元大小

适合标签的CollectionView单元大小
EN

Stack Overflow用户
提问于 2017-11-19 22:37:34
回答 2查看 3.5K关注 0票数 2

我已经设置了一个集合视图,该视图水平滚动并显示“companies”数组中的元素。

单元格根据标签宽度自动调整大小。

我使用了下面的代码和故事板约束来实现这个目标:

代码语言:javascript
运行
复制
class addTextStatus: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

    var companies: [String] = ["Everyone","Limited", "Friends", "Only Me", "Test Length Cells", ]

    @IBOutlet weak var collectionView: UICollectionView!
    @IBOutlet weak var userImage: UIImageView!
    override func viewDidLoad(){

              collectionView.register(UINib.init(nibName: "statusCompanyCollectionView", bundle: nil), forCellWithReuseIdentifier: "cell4")

        if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            flowLayout.estimatedItemSize = CGSize(width: 1,height: 1)

        }

        userImage.layer.masksToBounds = false
        userImage.layer.cornerRadius = userImage.frame.height/2
        userImage.clipsToBounds = true
    }
    @IBOutlet weak var backButton: UIButton!
    @IBAction func backButton(_ sender: Any) {

       dismiss(animated: true, completion: nil)

    }

    override var preferredStatusBarStyle : UIStatusBarStyle {
        return UIStatusBarStyle.default  
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.companies.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {


        let cell4 = collectionView.dequeueReusableCell(withReuseIdentifier: "cell4", for: indexPath) as! statusCompanyCollectionView

        cell4.company.text = self.companies[indexPath.item]

        return cell4
    }

    }

但是,问题是,当我在标签后面添加一个UIImage视图并分配约束时,它应该与标签的大小和位置相同,我得到了以下意想不到的结果:

实际上,我希望实现以下目标:

我用来应用图像背后的限制因素如下:

有趣的是,当我使用UIView而不是UIImage视图时,它会像预期的那样工作,但是我确实需要在这个实例中使用图像视图。

为什么会发生这种情况,我如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-20 02:45:20

标签有内在的大小。图像视图有内在的大小。

当您将标签和图像视图的宽度相等时,自动布局无法决定哪一个应该更改大小以满足约束。

您需要通过降低图像视图的内容拥抱和内容压缩抵抗优先级来消除这一歧义。

例如,您可能会使用Label CH=251、CCR=750和Image CH=240、CCR=740。

然后,在自动布局期间,您的标签的内在大小将获胜,图像视图将显示标签的大小。

普通视图没有内在的大小,所以当您尝试该选项(默认情况下标签获胜)时,没有任何模糊性。如果您试图将两个标签的宽度相等,您将看到同样的歧义。

票数 4
EN

Stack Overflow用户

发布于 2017-11-20 07:04:29

  1. 删除中心水平和中心垂直约束。
  2. 将引导和跟踪约束从UIImageView添加到UILabel

您只需要将四个约束(Leading,Trailing,Equalwidth,EqualHeight)从UIImageView添加到UILabel

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47382755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档