-
-
Save MrJackdaw/6ffbc33fc274838412bfe3ad48592b9b to your computer and use it in GitHub Desktop.
// This syntax reflects changes made to the Swift language as of Aug. '16 | |
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); break | |
case .Right: border.frame = CGRect(x: frame.maxX, y: frame.minY, width: thickness, height: frame.height); 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) | |
} | |
} |
Works lovely. Used it on a UICollectionViewCell. Many thanks.
Working lovely in UiTextField with some changes in switch block code:
switch side {
case .left: border.frame = CGRect(x:bounds.minX, y: bounds.minY, width: thickness, height: bounds.height)
case .right: border.frame = CGRect(x: bounds.maxX, y: bounds.minY, width: thickness, height: bounds.height)
case .top: border.frame = CGRect(x: bounds.minX, y: bounds.minY, width: bounds.width, height: thickness)
case .bottom: border.frame = CGRect(x: bounds.minX, y: bounds.maxY, width: bounds.width, height: thickness)
}
this code worked for my..... good luck
thanks
`import Foundation
import UIKit
// This syntax reflects changes made to the Swift language as of Aug. '16
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: 0.0, y: 0.0, width: thickness, height: frame.height); break
case .Right: border.frame = CGRect(x: frame.width-thickness, y: 0.0, width: thickness, height: frame.height); break
case .Top: border.frame = CGRect(x: 0.0, y: 0.0, width: frame.width, height: thickness); break
case .Bottom: border.frame = CGRect(x: 0.0, y: frame.height-thickness, width: frame.width, height: thickness); break
}
layer.addSublayer(border)
}
}
`
Also works for NSView
. Only need to swap top and bottom, since the coordinate system origin on macOS is in the left bottom of a view.
And per Swift naming guidelines, case names should be lowerCamelCase.
This doesn't work on all screen sizes. On bigger screens, it doesn't extend to the end of the border
Yeah, did you know how to solve it?
Also works for
NSView
. Only need to swap top and bottom, since the coordinate system origin on macOS is in the left bottom of a view.And per Swift naming guidelines, case names should be lowerCamelCase.
Great job. need declare CALayer for using with NSView
`
let layer = CALayer();
self.myView.layer = layer;
self.myView.wantsLayer = true
`
what if i want only 2 rounded corner (top left and top right ) with border on three sides(top , left and right)
@parveenkumar5 You can rewrite with OptionSet instead of Enum.
This doesn't work on all screen sizes. On bigger screens, it doesn't extend to the end of the border