9

I'm calling sizeToFit on a UILabel which has right aligned text in it. It shrinks the height and width of the UILabeland fits the text to the top left of the UILabel.

Now...the position of the UILabel is incorrect. How can I make the UILabel stay in its original position (right aligned) or move it so it'll appear at its original position?

Once again - the problem is that the sizeToFit method is shrinking the width from the right side of the UILabel. It is treating the UILabel text as left aligned. But my text is right aligned. So, the right side border of the UILabel is where my text begins.

Doron
  • 3,028
  • 6
  • 33
  • 56

2 Answers2

16
@implementation UILabel (Additions)

- (void)sizeToFitWithAlignmentRight {
    CGRect beforeFrame = self.frame;
    [self sizeToFit];
    CGRect afterFrame = self.frame;
    self.frame = CGRectMake(beforeFrame.origin.x + beforeFrame.size.width - afterFrame.size.width, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
}

@end
shiami
  • 6,724
  • 13
  • 50
  • 67
3

You check the widths before & after, then move the center of the view right by the difference / 2.

By the way, I think the "box" (frame) is shrunk in both directions, keeping the center intact.

Steven Kramer
  • 8,375
  • 2
  • 34
  • 43