• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

UIView Border Color

ThisIsBeat

Empire
Registriert
02.02.16
Beiträge
85
Hallo,

ich habe in meinem Code zwei UIViews und möchte nun für beide jeweils auf einer Seite den Rand einfärben. Bei der einen UIView funktioniert das auch, bei der anderen jedoch nicht. Weiß zufällig jemand warum ? Hier der Code:

PS: rightBorder funktioniert nicht

Code:
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var leftBorder: UIView!
    @IBOutlet weak var rightBorder: UIView!
   

    override func viewDidLoad() {
        super.viewDidLoad()
       
        leftBorder.addBorder(toSide: .Right, withColor: UIColor.white.cgColor, andThickness: 1.0)
        rightBorder.addBorder(toSide: .Left, withColor: UIColor.white.cgColor, andThickness: 1.0)
               // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

extension UIView {
   
    // Example use: myView.addBorder(toSide: .Left, withColor: UIColor.redColor().CGColor, andThickness: 1.0)
   
    enum ViewSide {
        case Left, Right, Top, Bottom
    }
   
    func addBorder(toSide side: ViewSide, withColor color: CGColor, andThickness thickness: CGFloat) {
       
        let border = CALayer()
        border.backgroundColor = color
       
        switch side {
        case .Left: border.frame = CGRect(x: frame.minX, y: frame.minY, width: thickness, height: frame.height + 200.0); break
        case .Right: border.frame = CGRect(x: frame.maxX, y: frame.minY, width: thickness, height: frame.height + 200.0); break
        case .Top: border.frame = CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: thickness); break
        case .Bottom: border.frame = CGRect(x: frame.minX, y: frame.maxY, width: frame.width, height: thickness); break
        }
       
        layer.addSublayer(border)
    }
}
 
Du berechnest den Frame für den „Border-Layer“ auf Basis des View-Frames. Das würde nur funktionieren, wenn der View in der oberen Linken Ecke liegt, also bei Punkt (x: 0, y:0). Du musst das Koordinatensystem des View verwenden, also die 'bounds'. Außerdem musst du die Breite bei der Positionierung des „Border-Layer“ für die Fälle .Right und .Bottom berücksichtigen.

Übrigens ist in den case Statements am Ende kein 'break' nötig. Das ist in Swift das Standardverhalten.
 
  • Like
Reaktionen: ThisIsBeat
Du berechnest den Frame für den „Border-Layer“ auf Basis des View-Frames. Das würde nur funktionieren, wenn der View in der oberen Linken Ecke liegt, also bei Punkt (x: 0, y:0). Du musst das Koordinatensystem des View verwenden, also die 'bounds'. Außerdem musst du die Breite bei der Positionierung des „Border-Layer“ für die Fälle .Right und .Bottom berücksichtigen.

Übrigens ist in den case Statements am Ende kein 'break' nötig. Das ist in Swift das Standardverhalten.

Super, hat funktioniert ! Vielen Dank :D