Skip to content

Instantly share code, notes, and snippets.

@Infinity-James
Created January 21, 2019 16:47
Show Gist options
  • Save Infinity-James/602860cfd9d266b72418a4119aed8419 to your computer and use it in GitHub Desktop.
Save Infinity-James/602860cfd9d266b72418a4119aed8419 to your computer and use it in GitHub Desktop.
Corner Borders for UIView
// MARK: Borders
public extension UIView {
/**
Adds borders to the given corners.
- Parameter corners: The corners to which borders should be added.
- Parameter color: The color of the borders.
- Parameter length: The length of each border across the view.
- Parameter width: The thickness of the borders.
*/
func addBorders(to corners: Set<Corner>, color: UIColor = .black, length: CGFloat = 16.0, width: CGFloat = 1.0) {
guard !corners.isEmpty else { return }
func createBorder() -> UIView {
let borderView = UIView(frame: CGRect.zero)
borderView.translatesAutoresizingMaskIntoConstraints = false
borderView.backgroundColor = color
return borderView
}
for corner in corners {
switch corner {
case .topLeading:
let topBorder = createBorder()
let leftBorder = createBorder()
addSubview(topBorder)
addSubview(leftBorder)
NSLayoutConstraint.activate([
topBorder.topAnchor.constraint(equalTo: topAnchor, constant: -width / 2.0),
topBorder.leadingAnchor.constraint(equalTo: leadingAnchor),
topBorder.widthAnchor.constraint(equalToConstant: length),
topBorder.heightAnchor.constraint(equalToConstant: width),
leftBorder.topAnchor.constraint(equalTo: topAnchor, constant: -width / 2.0),
leftBorder.leadingAnchor.constraint(equalTo: leadingAnchor, constant: -width / 2.0),
leftBorder.widthAnchor.constraint(equalToConstant: width),
leftBorder.heightAnchor.constraint(equalToConstant: length)
])
case .topTrailing:
let topBorder = createBorder()
let rightBorder = createBorder()
addSubview(topBorder)
addSubview(rightBorder)
NSLayoutConstraint.activate([
topBorder.topAnchor.constraint(equalTo: topAnchor, constant: -width / 2.0),
topBorder.trailingAnchor.constraint(equalTo: trailingAnchor),
topBorder.widthAnchor.constraint(equalToConstant: length),
topBorder.heightAnchor.constraint(equalToConstant: width),
rightBorder.topAnchor.constraint(equalTo: topAnchor, constant: -width / 2.0),
rightBorder.trailingAnchor.constraint(equalTo: trailingAnchor, constant: width / 2.0),
rightBorder.widthAnchor.constraint(equalToConstant: width),
rightBorder.heightAnchor.constraint(equalToConstant: length)
])
case .bottomTrailing:
let bottomBorder = createBorder()
let rightBorder = createBorder()
addSubview(bottomBorder)
addSubview(rightBorder)
NSLayoutConstraint.activate([
bottomBorder.bottomAnchor.constraint(equalTo: bottomAnchor, constant: width / 2.0),
bottomBorder.trailingAnchor.constraint(equalTo: trailingAnchor),
bottomBorder.widthAnchor.constraint(equalToConstant: length),
bottomBorder.heightAnchor.constraint(equalToConstant: width),
rightBorder.bottomAnchor.constraint(equalTo: bottomAnchor, constant: width / 2.0),
rightBorder.trailingAnchor.constraint(equalTo: trailingAnchor, constant: width / 2.0),
rightBorder.widthAnchor.constraint(equalToConstant: width),
rightBorder.heightAnchor.constraint(equalToConstant: length)
])
case .bottomLeading:
let bottomBorder = createBorder()
let leftBorder = createBorder()
addSubview(bottomBorder)
addSubview(leftBorder)
NSLayoutConstraint.activate([
bottomBorder.bottomAnchor.constraint(equalTo: bottomAnchor, constant: width / 2.0),
bottomBorder.leadingAnchor.constraint(equalTo: leadingAnchor),
bottomBorder.widthAnchor.constraint(equalToConstant: length),
bottomBorder.heightAnchor.constraint(equalToConstant: width),
leftBorder.bottomAnchor.constraint(equalTo: bottomAnchor, constant: width / 2.0),
leftBorder.leadingAnchor.constraint(equalTo: leadingAnchor, constant: -width / 2.0),
leftBorder.widthAnchor.constraint(equalToConstant: width),
leftBorder.heightAnchor.constraint(equalToConstant: length)
])
}
}
}
// MARK: Corner
enum Corner {
case topLeading
case topTrailing
case bottomTrailing
case bottomLeading
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment