如何在电池桌面上对齐UILabel?

时间:2013-05-28 06:41:21

标签: ios objective-c uitableview alignment uilabel

我创建一个在self中有tableview类的项目。 tableview的任何单元格中都有3个东西。 (1个按钮(左侧)和2个标签,如底部图像)

enter image description here

我希望标题单元格正确对齐,但我无法做到。

这是我的代码。我的错误在哪里:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self)
    {
        _backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"copymove-cell-bg"]];
        [_backgroundImageView setContentMode:UIViewContentModeTopRight];
        [self setBackgroundView:_backgroundImageView];
        [self setSelectionStyle:UITableViewCellSelectionStyleNone];

        _iconButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [_iconButton setFrame:CGRectMake(0, 10, 47, 50)];
        [_iconButton setAdjustsImageWhenHighlighted:NO];
        [_iconButton addTarget:self action:@selector(iconButtonAction:) forControlEvents:UIControlEventTouchUpInside];
        [_iconButton setImage:[UIImage imageNamed:@"item-icon-folder"] forState:UIControlStateNormal];
        [_iconButton setImage:[UIImage imageNamed:@"item-icon-folder-selected"] forState:UIControlStateSelected];
        [_iconButton setImage:[UIImage imageNamed:@"item-icon-folder-selected"] forState:UIControlStateHighlighted];
        [self.contentView addSubview:_iconButton];

        _titleTextField = [[UILabel alloc] initWithFrame:CGRectMake(69, 29, _titleTextField.frame.size.width, _titleTextField.frame.size.height)];
        [_titleTextField setFont:KOFONT_FILES_TITLE];
        [_titleTextField setTextColor:KOCOLOR_FILES_TITLE];
        [_titleTextField.layer setShadowColor:KOCOLOR_FILES_TITLE_SHADOW.CGColor];
        [_titleTextField setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin];
        [_titleTextField.layer setShadowOffset:CGSizeMake(0, 1)];
        [_titleTextField.layer setShadowOpacity:1.0f];
        [_titleTextField.layer setShadowRadius:0.0f];
        [_titleTextField setTextAlignment:UITextAlignmentRight];
        [_titleTextField setLineBreakMode:UILineBreakModeMiddleTruncation];
        [self.contentView addSubview:_titleTextField];
        [self.layer setMasksToBounds:YES];

        _countLabel = [[UILabel alloc] initWithFrame:CGRectMake(273, 29, 47, 28)];
        [_countLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin];
        [_countLabel setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"item-counter"]]];
        [_countLabel setTextAlignment:UITextAlignmentCenter];
        [_countLabel setLineBreakMode:UILineBreakModeMiddleTruncation];
        [_countLabel setFont:KOFONT_FILES_COUNTER];
        [_countLabel setTextColor:KOCOLOR_FILES_COUNTER];
        [_countLabel setShadowColor:KOCOLOR_FILES_COUNTER_SHADOW];
        [_countLabel setShadowOffset:CGSizeMake(0, 1)];

        [self setAccessoryView:_countLabel];
        [self.accessoryView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleBottomMargin];
    }
    return self;
}

7 个答案:

答案 0 :(得分:1)

如果您使用的是iOS6,

使用[_countLabel setTextAlignment:NSTextAlignmentCenter];,因为在iOS6中不推荐使用UITextAlignmentCenter。

要对齐,

[_countLabel setTextAlignment:NSTextAlignmentRight];

希望这可以帮助你...

答案 1 :(得分:0)

您的代码在我的最后工作正常。请检查您传递给标签的宽度和高度。只需通过设置标签的宽度和高度来检查代码。

希望它对你有所帮助。

答案 2 :(得分:0)

_titleTextField.contentHorizontalAlignment =  
         UIControlContentHorizontalAlignmentRight

答案 3 :(得分:0)

首先UITextAlignmentRightdeprecated in iOS6,因此您应该使用:

_titleTextField.textAlignment = 2;

其次,您需要检查UILabel Frame。检查CGFloat x, CGFloat y的{​​{1}}和width

  

textAlignment = 0(LeftAlignment)。   textAlignment = 1(CenterAlignment)。   textAlignment = 2(RightAlignment)。

希望它有所帮助。

答案 4 :(得分:0)

如果对齐标签内的文字是你的问题,那么上面的解决方案是好的。 如果设置框架是问题那么,我建议保持代码清洁像 -

拥有nibCell.xib个文件以及相应的.m.hCell.mCell.h文件,该文件是nib文件。 Cell类应为UITableViewCell的子类。将UILables/UIImageView/UIButton放在xib所需的位置,并使用Cell课程中的相应属性进行映射(同时在Cell identifier中提供一些Cell.xib )。

cellForRowatIndex datasource方法中,从nib获取单元格 -

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    Cell *cell = (Cell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];//same CellIdentifier as in the Cell.xib
                    if(cell==nil){
                 cell = [[[NSBundle mainBundle] loadNibNamed:@"Cell"  owner:self        options:nil] lastObject]; 
            }

        //Access and set the labels, imageViews here

            return cell;
        }

答案 5 :(得分:0)

_titleTextField = [[UILabel alloc] initWithFrame:CGRectMake(69, 29, _titleTextField.frame.size.width, _titleTextField.frame.size.height)];

这很奇怪。您可以根据自己的宽度和高度设置标签的宽度和高度。这将把它设置为前一个标签的宽度和高度。我不知道你第一次遇到这段代码会发生什么。

您的文本在标签视图的边界内与右侧对齐,但边界不会在您想要的位置结束。您可以尝试设置背景颜色,以便查看标签框的位置。

_titleTextField.backgroundColor = [UIColor yellowColor];

您应该将其设置为填充单元格的空间,并让它将文本放在其中。使标签的框架太大不会影响文本的大小,尽管可能会使其太小,具体取决于所设置的选项。

_titleTextField = [[UILabel alloc] initWithFrame:CGRectMake(69, 29, 273 - 69, self.contentview.bounds.size.height)]

答案 6 :(得分:0)

适用于iOS 10+& Swift 3 +

titleTextField.textAlignment = .center
lblTitle.textAlignment = .right