4

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

在此处输入图像描述

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

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

- (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;
}
4

7 回答 7

1

如果您使用的是 iOS6,

使用[_countLabel setTextAlignment:NSTextAlignmentCenter];,因为 UITextAlignmentCenter 在 iOS6 中已弃用。

要正确对齐,

[_countLabel setTextAlignment:NSTextAlignmentRight];

希望这可以帮助你...

于 2013-05-28T06:45:41.700 回答
0

首先UITextAlignmentRightdeprecated in iOS6,所以你应该使用:

_titleTextField.textAlignment = 2;

其次,您需要检查您的UILabel Frame. 检查您CGFloat x, CGFloat y的.widthUILable

textAlignment = 0(左对齐)。textAlignment = 1(居中对齐)。textAlignment = 2(右对齐)。

希望能帮助到你。

于 2013-05-28T07:12:03.823 回答
0

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

希望它可以帮助你。

于 2013-05-28T07:01:02.500 回答
0

如果对齐标签内的文本是您的问题,那么上述解决方案很好。如果设置框架是问题,我建议保持代码干净,例如 -

有一个nibsayCell.xib文件和一个对应的.msay .hand Cell.mfile Cell.h,它是nib文件的所有者。该类Cell应是 的子类UITableViewCell。将UILables/UIImageView/UIButton放在需要的位置,并将它们映射到类中xib的相应属性Cell(也在 中给出一些)。Cell identifierCell.xib

cellForRowatIndex datasource方法中,从笔尖中获取细胞,例如-

-(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;
        }
于 2013-05-28T09:46:15.457 回答
0
_titleTextField.contentHorizontalAlignment =  
         UIControlContentHorizontalAlignmentRight
于 2013-05-28T07:05:44.873 回答
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)]
于 2013-05-28T15:16:13.197 回答
0

适用于 iOS 10+ 和 Swift 3+

titleTextField.textAlignment = .center
lblTitle.textAlignment = .right
于 2017-03-02T18:12:17.163 回答