如何在框架中水平(向上/向下)居中UILabel文本?

时间:2014-05-02 21:50:29

标签: ios objective-c cocoa-touch uilabel

我有一个UILabel,它是simple control.的子类。我遇到的问题是标签中的文本被格式化为其框架的左上角。通常,UILabel文本将在框架中水平居中,而不是一直对着顶部。

我需要在UILabel中将文本水平(上/下)居中。我该怎么做才能实现这一目标?

我在下面发布的代码显示了我正在做的事情,UILabel是我的storyboard视图控制器上的对象的outlet属性。我在此标签上设置了约束,以便它动态地适合其超级视图。

- (void)setTitleForCell:(NSString *)title
{
    [self.titleLabel setText:title];

    UIColor *titleColor = [UIColor darkGrayColor];
    NSMutableParagraphStyle *titleParagraphStyle = [[NSMutableParagraphStyle alloc] init];
    [titleParagraphStyle setAlignment:NSTextAlignmentLeft];
    [titleParagraphStyle setLineBreakMode:NSLineBreakByWordWrapping];

    NSDictionary *titleAttributes = [NSDictionary dictionaryWithObjectsAndKeys:titleColor, NSForegroundColorAttributeName, [UIFont fontWithName:@"HelveticaNeue-Light" size:13.0f], NSFontAttributeName, titleParagraphStyle, NSParagraphStyleAttributeName, nil];
    [self.titleLabel setAttributes:titleAttributes];

    NSDictionary *handleAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor lightGrayColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"HelveticaNeue-Light" size:13.0f], NSFontAttributeName, nil];
    NSDictionary *hashtagAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor lightGrayColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"HelveticaNeue-Light" size:13.0f], NSFontAttributeName, nil];

    [self.titleLabel setAttributes:handleAttributes hotWord:STTweetHandle];
    [self.titleLabel setAttributes:hashtagAttributes hotWord:STTweetHashtag];

    [self.titleLabel setDetectionBlock:^(STTweetHotWord hotWord, NSString *string, NSString *protocol, NSRange range) {
        NSArray *hotWords = @[@"Handle", @"Hashtag", @"Link"];

        if (hotWord == STTweetHandle) {

        }
    }];
}

我还将帧的背景设置为一种颜色,以便我可以看到它的设置,但就像我想的那样,文本尽可能地与顶部对齐。文本下方仍有足够的空间。

1 个答案:

答案 0 :(得分:0)

我建议您更改标签的约束,使其高度不固定(当您从顶部指定0,从底部指定0时 - 高度固定为单元格的高度),并且它垂直居中在容器中。

作为旁注:在排除布局问题时,我发现将临时背景颜色设置为各种鲜艳颜色非常有用(例如cell到绿色,title到蓝色,所以它是非常有用的清除每个视图占用的帧。