Created
August 21, 2018 09:10
-
-
Save mushu8/e7182a25d28021b550f57ace616e4eee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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