swift 3: Material-Design-Chip erstellen

Heyhey,

seit ein paar Tagen versuche ich den "Material-Design-Chip" zu erstellen, aber nur mit halbem Erfolg.

Der Versuch mit dem größten Erfolg, den ich hatte, besteht darin, eine Unterklasse aus "Button" zu erstellen (Button ist eine Unterklasse aus UIButton, die aus @ erstellt wurd cosmicmind in seinem MaterialDesign-Framework für swift).

Für die Leute, die nicht wissen, meine ich mit "Chips":Klicke hie

meine Beispiele:

Der einfache / nicht löschbare Chip
import UIKit
import Material

class ChipButton: Button {
    override func prepare() {
        super.prepare()

        cornerRadiusPreset      = .cornerRadius5
        backgroundColor         = UIColor.lightGray
        titleColor              = Color.darkText.primary
        pulseAnimation          = .none
        contentEdgeInsets       = EdgeInsets(top: 0, left: 12, bottom: 0, right: 12)
        isUserInteractionEnabled = false
        titleLabel?.font        = RobotoFont.regular
        isOpaque                = true
    }
}

und um diese Schaltfläche zu erstellen:

let button = ChipButton()
    button.title = "default chip"

    view.layout(button).height(32).center(offsetY: -150)
er Kontakt-Chip / Icon-Ch
import UIKit
import Material

class ChipIconButton: ChipButton {
    /*override func prepare() {
        super.prepare()

        contentEdgeInsets       = EdgeInsets(top: 0, left: 16, bottom: 0, right: 12)
    }*/

    public convenience init(image: UIImage?, title: String?){
        self.init()
        prepare(with: image, title: title)
    }

    private func prepare(with image: UIImage?, title: String?) {
        self.image = image
        self.title = title

        self.imageView?.backgroundColor = UIColor.darkGray // this works
        self.imageView?.cornerRadiusPreset = .cornerRadius4 // this works
        self.imageView?.tintColor  = Color.black // this doesn't work

        self.imageEdgeInsets    = EdgeInsets(top: 0, left: -8, bottom: 0, right: 12)
        self.titleEdgeInsets    = EdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        self.contentEdgeInsets  = EdgeInsets(top: 0, left: 8, bottom: 0, right: 12)
    }
}

hier will ich

Ändere die Größe des UIImageView auf die Höhe des Chips (das sind 32 Punkte)

I tried with self.imageView?.frame = CGRect(x: 50, y: 50, width: 32, height: 32) but nothing changed

Resize das UIImage etwas kleiner (auf 20 Punkte)

tintColor des UIImage ändern

I tryed with self.imageView?.tintColor = Color.black but nothing changed
er löschbare Ch
import UIKit
import Material

class ChipDeleteableButton: ChipButton {

    override func prepare() {
        super.prepare()

        self.image = #imageLiteral(resourceName: "ic_close_white_24px")
        self.title = title

        //self.frame = CGRect(x: 50, y: 50, width: 32, height: 32)
        self.imageView?.backgroundColor = UIColor.darkGray
        self.imageView?.cornerRadiusPreset = .cornerRadius4
        self.imageView?.tintColor  = Color.black

        self.imageEdgeInsets    = EdgeInsets(top: 0, left: self.frame.size.width, bottom: 0, right: 0)
        self.titleEdgeInsets    = EdgeInsets(top: 0, left: 0, bottom: 0, right: self.frame.size.width)
        self.contentEdgeInsets  = EdgeInsets(top: 0, left: 8, bottom: 0, right: 12)
    }
}

Hier habe ich versucht, die Positionen der Beschriftung und mit imageEdgeInsets und titleEdgeInsets zu wechseln, aber self.frame.size.width gibt eine falsche Breite zurück (möglicherweise wegen AutoLayout, aber ich bin nicht sicher)

Hilf

Hoffentlich kann mir jemand helfen!

ps. Ich bin ein kleiner Neuling bei swift / xcode

Antworten auf die Frage(2)

Ihre Antwort auf die Frage