Размер содержимого ячейки коллекции - PullRequest
0 голосов
/ 30 апреля 2018

Я добавил представление в виде родительского красного представления в CollectionViewCell и следующее синее подпредставление в центре родительского представления. Он работает правильно, и вспомогательное представление перемещается в центр родительского представления, прежде чем размер ячейки коллекции не изменится. Но размер ячейки изменяется путем соответствия метода из протокола UICollectionViewDelegateFlowLayout, и представление не центрируется относительно ячейки правильно. Как я могу решить эту проблему?

class ItemCollectionViewCell: UICollectionViewCell {  
   var parentView: UIView!
   var circularView: UIView!    
   var itemImage: UIImageView!    
   var itemName: UILabel!   
   override init(frame: CGRect) {
    super.init(frame: frame)       
     //  self.updateView()
   }

   required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      self.updateView()
   }

   func updateView(){
      self.clipsToBounds = true
      self.parentView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 
         self.frame.size.width, height: self.frame.size.height))

      self.parentView.backgroundColor = UIColor.red
      self.circularView = UIView(frame: CGRect(x: 0, y: 0, width: 
        self.parentView.frame.size.width / 4 , height: 
          self.parentView.frame.size.width / 4 ))
      self.circularView.backgroundColor = UIColor.blue
      self.addSubview(parentView)
      self.parentView.addSubview(self.circularView)
      self.circularView.center = self.parentView.center
  }
}

Before conform protocol and size is not changed for indexPath[![View is not centered correctly 1 ] 2

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Попробуйте сделать:

self.circularView.center = CGPointMake(CGRectGetMidX(self.parentView.bounds), CGRectGetMidY(self.parentView.bounds))

Почему это должно работать? Попробуйте проверить значения self.parentView.center для каждой ячейки, они могут быть не такими, как вы хотите, потому что свойство center дает значения относительно системы координат родительского представления.

0 голосов
/ 30 апреля 2018

Удалите следующую строку из updateView ()

self.circularView.center = self.parentView.center

Пожалуйста, добавьте его к следующему методу:

override func layoutSubviews() {
        super.layoutSubviews()
        self.circularView.center = self.parentView.center
}

, например

class ItemCollectionViewCell: UICollectionViewCell {
        var parentView: UIView!
        var circularView: UIView!
        var itemImage: UIImageView!
        var itemName: UILabel!
        override init(frame: CGRect) {
            super.init(frame: frame)
            //  self.updateView()
        }

        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            self.updateView()
        }

        func updateView(){
            self.clipsToBounds = true
            self.parentView = UIView(frame: CGRect(x: 0.0, y: 0.0, width:
                self.frame.size.width, height: self.frame.size.height))

            self.parentView.backgroundColor = UIColor.red
            self.circularView = UIView(frame: CGRect(x: 0, y: 0, width:
                self.parentView.frame.size.width / 4 , height:
                self.parentView.frame.size.width / 4 ))
            self.circularView.backgroundColor = UIColor.blue
            self.addSubview(parentView)
            self.parentView.addSubview(self.circularView)
        }

        override func layoutSubviews() {
            super.layoutSubviews()
            self.circularView.center = self.parentView.center
        }
    }
0 голосов
/ 30 апреля 2018

Попробуйте этот код

self.circularView.center = CGPoint(x: self. parentView.bounds.midX, y: self. parentView.bounds.midY)
self.parentView.addSubview(self.circularView)
self.addSubview(parentView)
...