Странная граница отображается при использовании переопределения функции рисования (_ rect: CGRect) - PullRequest
0 голосов
/ 21 января 2019

У меня проблема со странными и нежелательными серыми границами, которые я не могу скрыть. Серая верхняя и правая границы появляются только тогда, когда я перезаписываю func draw (_ rect: CGRect).

Strange borders on top and right side of the button

По причинам теста я намеренно установил синий цвет для представления в layoutSubviews (). Но странные границы остаются.

When a border is set in layoutSubviews(), the strange borders persist

У меня есть одна созданная кнопка:

import UIKit

class CardView: UIButton {
    override func draw(_ rect: CGRect) {         
        //activating this function enables the borders, even when I draw a Bezier path in this function the borders doesn't disappear    
    }
}

12 кнопок должны отображаться в CardContainerView:

import UIKit

class CardContainerView: UIView {

    // Create Cards
    var cardViews = [CardView](){
        didSet {
            for card in cardViews {
                addSubview(card)
                card.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
                card.layer.borderColor = UIColor.white.cgColor
                card.layer.borderWidth = 0
            }
        }
    }

    private(set) var grid = Grid(layout: Grid.Layout.aspectRatio(3/2))

    /// The centered rect in which the buttons are going to be positioned.
    private var centeredRect: CGRect {
        get {
            return CGRect(x: bounds.size.width * 0.025,
                          y: bounds.size.height * 0.025,
                          width: bounds.size.width * 0.95,
                          height: bounds.size.height * 0.95)
        }
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        grid.cellCount = cardViews.count
        grid.frame = centeredRect

        for i in 0...cardViews.count {
            if let frame = grid[i] {
                cardViews[i].frame = frame
                cardViews[i].layer.cornerRadius = 10
                cardViews[i].layer.borderColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0)
                cardViews[i].layer.borderWidth = 0.0
            }
        }
    }
}

Я деактивировал все границы или сделал их невидимыми для Карты и Контейнера, но это не оказывает влияния на эти границы, показанные выше. Только комментирование переопределения func draw (_ rect: CGRect) отключает границы. Однако мне нужно решение, чтобы нарисовать что-то и скрыть границы. Есть ли у вас какие-либо идеи? Если вам нужен также объект сетки, его можно найти здесь: https://cs193p.stanford.edu/Fall2017/Grid.swift.zip

1 Ответ

0 голосов
/ 22 января 2019

Я нашел проблему.Я увеличил высоту одного из моих ограничений для cardContainerView в моей раскадровке на шаг 1. Теперь строки пропали.Похоже, что ошибки округления или что-то вроде этого вызывали эту проблему.

...