2017-11-19 14 views
0

가로로 스크롤하고 요소를 '회사'배열에 표시하는 데 사용하여 컬렉션보기를 설정했습니다.CollectionView 셀 크기에 맞게 레이블

enter image description here

세포 자동 라벨 폭에 대해 크기 조정.

내가 코드 & 스토리 보드 제약을 사용했다

아래이를 달성하기 :

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보기를 추가하고 지시 제약을 할당한다 그러나

enter image description here

라벨과 동일한 크기와 위치 여야합니다. 아래 예기치 않은 결과가 나옵니까 :

enter image description here

나는 다음과 달성하고자 할 때 실제로는 :

enter image description here

내가 뒤에 이미지를 적용하는 데 사용한 제약은 다음과 같습니다 :

enter image description here

흥미롭게 때 UIImage보기 대신 UIView를 사용하여 예상대로 작동하지만이 인스턴스에서 이미지보기를 사용해야합니다.

왜 이런 현상이 발생하며 어떻게이 문제를 해결합니까?

+0

내게는 문제의 _ 그 내용이 콘텐츠 포깅 ** 및 콘텐츠 ** 압축 저항 ** 라벨에 부적절하게 구성된 우선 순위 인 것 같습니다. 부가 적으로, 스태킹 할 때 자동 레이아웃을 수행하는 것이 더 쉽게 발견 된 ['UIStackView'] (https://www.raywenderlich.com/160646/uistackview-tutorial-introducing-stack-views-2)를 사용하는 것을 고려하십시오 조회수. –

답변

2

레이블의 고유 한 크기입니다. 이미지보기에는 본질적인 크기가 있습니다.

레이블의 너비와 이미지보기를 같게하면 자동 레이아웃에서 제약 조건을 충족하기 위해 크기를 변경해야하는 자동 레이아웃을 결정할 수 없습니다.

이미지보기의 내용 포깅 및 내용 압축 저항 우선 순위를 낮춤으로써이를 명확히해야합니다.

레이블 CH = 251, CCR = 750 및 이미지보기 CH = 240, CCR = 740으로 끝날 수도 있습니다.

자동 레이아웃 중에 라벨의 고유 크기가 적용되고 이미지보기가 라벨의 크기를 차지합니다.

일반보기에는 본질적인 크기가 없으므로 해당 옵션을 시도 할 때 모호성이 없었습니다 (기본적으로 레이블이 선택됨). 두 레이블의 너비를 동일하게하려고하면 동일한 모호성이 나타납니다.

+0

안녕하세요, 그냥 작동 솔루션을 제공하기위한뿐만 아니라, 또한 명확하고 간결한 설명을 주셔서 감사 드리고 싶었 :) :) 많이 감사! – MattBlack

0
  1. 센터 제거 가로 및 세로 가운데 구속 조건.
  2. 선행 및 후행 제약을 UIImageView에서 UILabel으로 추가하십시오.

당신 만 UILabelUIImageView에서 4 개 제약 (Leading,Trailing,Equalwidth,EqualHeight)를 추가해야합니다.