Skip to content

Instantly share code, notes, and snippets.

@mushu8
Created August 21, 2018 09:10
Show Gist options
  • Save mushu8/e7182a25d28021b550f57ace616e4eee to your computer and use it in GitHub Desktop.
Save mushu8/e7182a25d28021b550f57ace616e4eee to your computer and use it in GitHub Desktop.
import UIKit
class ASLabel: UILabel {
fileprivate var edgeInsets: UIEdgeInsets = UIEdgeInsets(top: 0,
left: 0,
bottom: 0,
right: 0)
@IBInspectable
public var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = abs(CGFloat(Int(newValue * 100)) / 100)
}
}
@IBInspectable
public var borderColor: UIColor? {
get {
return layer.borderColor == nil ? nil : UIColor(cgColor: layer.borderColor!)
}
set {
layer.borderColor = newValue?.cgColor
}
}
@IBInspectable
public var borderWidth: CGFloat {
get {
return layer.borderWidth
}
set {
layer.borderWidth = newValue
}
}
@IBInspectable
public var shadowOpacity: Float {
get {
return layer.shadowOpacity
}
set {
layer.shadowOpacity = newValue
}
}
@IBInspectable
public var shadowRadius: CGFloat {
get {
return layer.shadowRadius
}
set {
layer.shadowRadius = newValue
}
}
@IBInspectable
public override var shadowOffset: CGSize {
get {
return layer.shadowOffset
}
set {
layer.shadowOffset = newValue
}
}
@IBInspectable var isCircle : Bool = false {
didSet{ layoutSubviews() }
}
@IBInspectable
public var topPadding: CGFloat {
get {
return self.edgeInsets.top
}
set {
self.edgeInsets = UIEdgeInsetsMake(topPadding,
self.edgeInsets.left,
self.edgeInsets.bottom,
self.edgeInsets.right)
}
}
@IBInspectable
public var leftPadding: CGFloat {
get {
return self.edgeInsets.left
}
set {
self.edgeInsets = UIEdgeInsetsMake(self.edgeInsets.top,
leftPadding,
self.edgeInsets.bottom,
self.edgeInsets.right)
}
}
@IBInspectable
public var bottomPadding: CGFloat {
get {
return self.edgeInsets.bottom
}
set {
self.edgeInsets = UIEdgeInsetsMake(self.edgeInsets.bottom,
self.edgeInsets.left,
bottomPadding,
self.edgeInsets.right)
}
}
@IBInspectable
public var rightPadding: CGFloat {
get {
return self.edgeInsets.right
}
set {
self.edgeInsets = UIEdgeInsetsMake(self.edgeInsets.top,
self.edgeInsets.left,
self.edgeInsets.bottom,
rightPadding)
}
}
override func layoutSubviews()
{
super.layoutSubviews()
if isCircle {
cornerRadius = self.layer.frame.size.height / 2
layer.masksToBounds = true
}
}
override func drawText(in rect: CGRect)
{
super.drawText(in: UIEdgeInsetsInsetRect(rect, edgeInsets))
}
override var intrinsicContentSize: CGSize
{
let superContentSize = super.intrinsicContentSize
let width = superContentSize.width + edgeInsets.left + edgeInsets.right
let heigth = superContentSize.height + edgeInsets.top + edgeInsets.bottom
return CGSize(width: width, height: heigth)
}
var isTruncated: Bool {
guard let labelText = text else {
return false
}
if labelText == ""{
return false
}
let size = text?.size(withAttributes: [.font: font]) ?? .zero
return size.width > bounds.size.width
}
func height(_ text: String,font: CGFloat, width: CGFloat) {
self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: width, height: CGFloat.greatestFiniteMagnitude)
self.numberOfLines = 0
self.lineBreakMode = .byWordWrapping
self.font = UIFont.systemFont(ofSize: font)
self.text = text
self.sizeToFit()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment