PaddingDesignable.swift 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //
  2. // Created by Jake Lin on 11/18/15.
  3. // Copyright © 2015 IBAnimatable. All rights reserved.
  4. //
  5. import UIKit
  6. public protocol PaddingDesignable: class {
  7. /**
  8. `padding-left`
  9. */
  10. var paddingLeft: CGFloat { get set }
  11. /**
  12. `padding-right`
  13. */
  14. var paddingRight: CGFloat { get set }
  15. /**
  16. `padding-left` and `padding-right`
  17. */
  18. var paddingSide: CGFloat { get set }
  19. }
  20. public extension PaddingDesignable where Self: UITextField {
  21. func paddedRect(forBounds bounds: CGRect) -> CGRect {
  22. if paddingSide.isNaN && paddingLeft.isNaN && paddingRight.isNaN {
  23. return bounds
  24. }
  25. return bounds.inset(by: paddingInsets)
  26. }
  27. private var paddingInsets: UIEdgeInsets {
  28. if paddingSide.isNaN {
  29. return insets(left: paddingLeft, right: paddingRight)
  30. } else {
  31. return sideInsets(padding: paddingSide)
  32. }
  33. }
  34. private func sideInsets(padding: CGFloat) -> UIEdgeInsets {
  35. return UIEdgeInsets(top: 0, left: padding, bottom: 0, right: padding)
  36. }
  37. private func insets(left: CGFloat, right: CGFloat) -> UIEdgeInsets {
  38. let l = left.isNaN ? 0 : left
  39. let r = right.isNaN ? 0 : right
  40. return UIEdgeInsets(top: 0, left: l, bottom: 0, right: r)
  41. }
  42. }