Uicollectionviewflowlayout minimumLineSpacing не применяется ко всему представлению коллекции-Swift

Я создаю подкласс UIView для календаря, в котором UICollectionView с компоновкой потока используется для отображения дат. Код является :

    override func draw(_ rect: CGRect)
    {
        super.draw(rect)
        .
        .

        configureCalendarView()
        .
    }



    func configureCalendarView()
    {
        cellWd = Double(self.frame.size.width)/7.0

        let layout = UICollectionViewFlowLayout.init()
        layout.minimumLineSpacing = 0.5
        layout.minimumInteritemSpacing = 0.0
        layout.sectionInset = UIEdgeInsetsMake(1, 0, 0, 0)

        collectionV = UICollectionView.init(frame: CGRect(x: 0, y:90, width:self.frame.size.width, height:CGFloat(cellWd * 5 + 3.5)), collectionViewLayout: layout)
        collectionV?.backgroundColor = self.backgroundColor
        collectionV?.isScrollEnabled = false
        collectionV?.register(DayCell.classForCoder(), forCellWithReuseIdentifier:reuseID)
        collectionV?.dataSource = self;
        collectionV?.delegate = self;
        collectionV?.backgroundColor = calBgColor  //lightgray
        self.addSubview(collectionV!)
    }

Все работает хорошо, но минимальный интервал между строками не имеет никакого эффекта между 2-й и 3-й строкой. Ниже приведен скриншот :

Введите описание изображения здесь

Что происходит не так ? Любая помощь была бы очень признательна . Спасибо!

1 ответ

  1. макет.minimumLineSpacing = 0.5 преобразуется в 0.5 point * scale = pixels.

    Таким образом, если вы работаете на iphone 6+ 7+ со шкалой 3.0, то 0.5 будет 1.5 пикселей. И в масштабе 2x, который будет 1 пиксель.
    Исправить это. добавить это:

    макет.minimumLineSpacing = 1.0 / [uiscreen mainScreen].масштаб;
    Таким образом, Вы гарантированно всегда получаете 1 пиксельное расстояние.

    Редактировать:

    layout.minimumLineSpacing = 1.0f;
    
    CGFloat collectionWidth = self.frame.size.width;
    CGFloat days = 7.0f;
    CGFloat spacing = 1.0f;
    
    CGFloat itemHeight = floorf((collectionWidth/days) - spacing;