SSLabel.m 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. //
  2. // SSLabel.m
  3. // SSToolkit
  4. //
  5. // Created by Sam Soffes on 7/12/10.
  6. // Copyright 2010-2011 Sam Soffes. All rights reserved.
  7. //
  8. #import "SSLabel.h"
  9. @interface SSLabel ()
  10. - (void)_initialize;
  11. @end
  12. @implementation SSLabel
  13. #pragma mark - Accessors
  14. @synthesize verticalTextAlignment = _verticalTextAlignment;
  15. - (void)setVerticalTextAlignment:(SSLabelVerticalTextAlignment)verticalTextAlignment {
  16. _verticalTextAlignment = verticalTextAlignment;
  17. [self setNeedsLayout];
  18. }
  19. @synthesize textEdgeInsets = _textEdgeInsets;
  20. - (void)setTextEdgeInsets:(UIEdgeInsets)textEdgeInsets {
  21. _textEdgeInsets = textEdgeInsets;
  22. [self setNeedsLayout];
  23. }
  24. #pragma mark - UIView
  25. - (id)initWithCoder:(NSCoder *)aDecoder {
  26. if ((self = [super initWithCoder:aDecoder])) {
  27. [self _initialize];
  28. }
  29. return self;
  30. }
  31. - (id)initWithFrame:(CGRect)aFrame {
  32. if ((self = [super initWithFrame:aFrame])) {
  33. [self _initialize];
  34. }
  35. return self;
  36. }
  37. #pragma mark - UILabel
  38. - (void)drawTextInRect:(CGRect)rect {
  39. rect = UIEdgeInsetsInsetRect(rect, _textEdgeInsets);
  40. if (self.verticalTextAlignment == SSLabelVerticalTextAlignmentTop) {
  41. CGSize sizeThatFits = [self sizeThatFits:rect.size];
  42. rect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, sizeThatFits.height);
  43. } else if (self.verticalTextAlignment == SSLabelVerticalTextAlignmentBottom) {
  44. CGSize sizeThatFits = [self sizeThatFits:rect.size];
  45. rect = CGRectMake(rect.origin.x, rect.origin.y + (rect.size.height - sizeThatFits.height), rect.size.width, sizeThatFits.height);
  46. }
  47. [super drawTextInRect:rect];
  48. }
  49. #pragma mark - Private
  50. - (void)_initialize {
  51. self.verticalTextAlignment = SSLabelVerticalTextAlignmentMiddle;
  52. self.textEdgeInsets = UIEdgeInsetsZero;
  53. }
  54. @end