【问题标题】:Error: Value of type 'CGRect' has no member 'center'错误:“CGRect”类型的值没有成员“中心”
【发布时间】:2019-05-08 15:07:34
【问题描述】:

尝试为圆形集合视图创建布局。除了我试图将位置居中之外,一切似乎都很好。

override func prepare() {
        super.prepare()
        guard let collectionView = collectionView else { return }
        itemLayoutAttributes.removeAll()
        layoutCircleFrame = CGRect(origin: .zero, size: collectionViewContentSize)
            .inset(by: layoutInsets)
            .insetBy(dx: itemSize.width / 2.0, dy: itemSize.height / 2.0)
            .offsetBy(dx: collectionView.contentOffset.x, dy: collectionView.contentOffset.y)
            .insetBy(dx: -collectionView.contentOffset.x, dy: -collectionView.contentOffset.y)

        for section in 0..<collectionView.numberOfSections {
            switch section {
            case 0:
                let itemCount = collectionView.numberOfItems(inSection: section)
                itemLayoutAttributes = (0..<itemCount).map({ (index) -> UICollectionViewLayoutAttributes in
                    let angleStep: CGFloat = 2.0 * CGFloat.pi / CGFloat(itemCount)
                    var position = layoutCircleFrame.center
                    position.x += layoutCircleFrame.size.innerRadius * cos(angleStep * CGFloat(index))
                    position.y += layoutCircleFrame.size.innerRadius * sin(angleStep * CGFloat(index))
                    let indexPath = IndexPath(item: index, section: section)
                    let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath)
                    attributes.frame = CGRect(center: position, size: itemSize)
                    return attributes
                })
            default:
                fatalError("Unhandled section \(section).")
            }
        }

预计会运行,但收到​​错误:“CGRect”类型的值没有成员“中心”。这个错误就行了;

var position = layoutCircleFrame.center

【问题讨论】:

标签: swift


【解决方案1】:

我所做的是将此扩展名添加到我的代码中(在文件的顶层):

extension CGRect {
    var center : CGPoint {
        return CGPoint(x:self.midX, y:self.midY)
    }
}

【讨论】:

    【解决方案2】:

    CGRect 中没有 center 属性,因此出现错误。这是UIView 的属性。

    你可以这样做:

    var position = CGPoint(x: layoutCircleFrame.midX, y: layoutCircleFrame.midY)
    

    或者,如here 所示,您可以通过扩展将center 属性添加到CGRect

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多