UICollectionViewFlowLayout minimumLineSpacing未应用于整个集合视图 - Swift

时间:2017-01-16 11:34:24

标签: ios swift uicollectionview spacing flowlayout

我正在为日历创建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行之间没有任何影响。以下是截图:

enter image description here

出了什么问题?任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

layout.minimumLineSpacing = 0.5转换为0.5point * scale = pixels。

因此,如果您使用3.0规模的iphone 6+ 7+运行,那么0.5将是1.5像素。并且在2x比例上将是1个像素。 纠正这个。加上这个:

layout.minimumLineSpacing = 1.0 / [UIScreen mainScreen] .scale; 这样,您可以保证始终获得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;