• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

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