【问题标题】:UILabel text truncates when rotated. How to fix?UILabel 文本在旋转时会被截断。怎么修?
【发布时间】:2011-11-02 08:46:04
【问题描述】:

我正在创建一个水印以覆盖在图像视图的顶部。图像可以平移、缩放等。

我创建了一个水印视图类,当调整大小时,它会覆盖一个与边界一样大的文本标签。这很好用,并且随着图像的大小等而适当地调整大小。

现在我想旋转标签。一旦我应用转换,标签中的文本就会被截断。我认为我很接近,但我正在做一些愚蠢的事情,因为我是新手。有什么想法吗?

这是我的课:

@interface WatermarkView ()
- (CGFloat)biggestBoldFontForString:(NSString*)text inRect:(CGRect)rect;
@end

@implementation WatermarkView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) 
    {
        // create a label that will display the watermark
        mainLabel = [[UILabel alloc] initWithFrame:frame];
        mainLabel.alpha = 0.35;
        mainLabel.backgroundColor = [UIColor clearColor];
        mainLabel.text = @"watermark";
        mainLabel.font = [UIFont boldSystemFontOfSize:[self biggestBoldFontForString:mainLabel.text inRect:mainLabel.frame]];
        mainLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

        // rotate label to a random slanted angle
        mainLabel.transform = CGAffineTransformMakeRotation(RANDOM_FLOAT(-M_PI/5, -M_PI/6));

        [self addSubview:mainLabel];
    }
    return self;
}

- (void)dealloc
{
    [mainLabel release];

    [super dealloc];
}

- (CGFloat)biggestBoldFontForString:(NSString*)text inRect:(CGRect)rect
{
    CGFloat actualFontSize = 200;
    [text sizeWithFont:[UIFont boldSystemFontOfSize:200] minFontSize:1 actualFontSize:&actualFontSize forWidth:rect.size.width lineBreakMode:0];
    return actualFontSize;
}

- (void)layoutSubviews 
{
    [super layoutSubviews];

    mainLabel.font = [UIFont boldSystemFontOfSize:[self biggestBoldFontForString:mainLabel.text inRect:self.frame]];
}

@end

【问题讨论】:

  • 你发现问题了吗?
  • 你说'现在我要旋转标签',这是用户旋转设备的时候吗?

标签: ios xcode cocoa-touch


【解决方案1】:

一个简单的解决方案可能是简单地创建第二个标签,就像您的第一个标签一样,但要适应旋转的视图。保持隐藏或 alpha=0,然后在旋转时隐藏初始 textView 并取消隐藏新 Text。

另一个问题可能是你的框架太小了,一旦旋转,试着保持你想要的字体大小和文本居中对齐,但是让 TextView 框架比你想象的要大得多。

【讨论】:

    【解决方案2】:

    标签在旋转变换后截断的原因是边界缩小。解决方法是在旋转之前存储标签的宽度,在didRotateFromInterfaceOrientation之后重新赋值。

    例如

    @synthesize labelWidth
    
    (void)viewDidLoad
    {
    self.labelWidth = _label.bounds.size.width;
    _label.transform = CGAffineTransformMakeRotation(-1.3f);
    }
    
    -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
    {
    CGRect bounds = _label.bounds;
    bounds.size.width = self.labelWidth;
    _label.bounds = bounds;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多