Programing

UITableViewCell 문제의 가운데 맞춤 텍스트

crosscheck 2020. 11. 20. 08:38
반응형

UITableViewCell 문제의 가운데 맞춤 텍스트


저는 Objective-C 및 iPhone 개발에 익숙하지 않으며 텍스트를 표 셀의 중앙에 배치하려고 할 때 문제가 발생했습니다. Google을 검색했지만 솔루션은 수정 된 이전 SDK 버그에 대한 것이며이 버그는 저에게 작동하지 않습니다.

일부 코드 :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = @"Please center me";
    cell.textLabel.textAlignment = UITextAlignmentCenter;
    return cell;
}

위의 내용은 텍스트를 중앙에 배치하지 않습니다.

또한 willDisplayCell 메서드를 시도했습니다.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.textLabel.textAlignment = UITextAlignmentCenter;
}

그리고 오래된 게시 된 솔루션 중 일부를 시도했습니다.

UILabel* label = [[[cell contentView] subviews] objectAtIndex:0];
label.textAlignment = UITextAlignmentCenter;
return cell;

이들 중 어느 것도 텍스트 정렬에 영향을주지 않습니다. 나는 아이디어의 어떤 도움이 가장 감사 할 것입니다.

미리 건배.


특정 문제에 도움이되는지 모르지만 사용하면 UITextAlignmentCenter작동합니다.initWithStyle:UITableViewCellStyleDefault


textLabel주어진 텍스트에 필요한만큼만 넓기 때문에 작동하지 않습니다 . ( 스타일로 UITableViewCell설정할 때 적합하다고 생각되는대로 레이블을 이동 UITableViewCellStyleSubtitle)

레이블이 항상 셀의 전체 너비를 채우도록 layoutSubviews를 재정의 할 수 있습니다.

- (void) layoutSubviews
{
    [super layoutSubviews];
    self.textLabel.frame = CGRectMake(0, self.textLabel.frame.origin.y, self.frame.size.width, self.textLabel.frame.size.height);
    self.detailTextLabel.frame = CGRectMake(0, self.detailTextLabel.frame.origin.y, self.frame.size.width, self.detailTextLabel.frame.size.height);
}

detailTextLabel의 텍스트가 비어 textLabel있는 한 세로 중앙에 위치하므로 높이 / y 위치를 동일하게 유지해야합니다 .


이 코드를 사용하십시오.

cell.textLabel.textAlignment = NSTextAlignmentCenter;

위의 코드가 작동합니다. UITextAlignmentCenter를 사용하지 마십시오. 더 이상 사용되지 않습니다.


이 해킹은 UITableViewCellStyleSubtitle을 사용할 때 텍스트를 중앙에 배치합니다. 문자열과 함께 두 텍스트 레이블을 모두로드 한 다음 셀을 반환하기 전에이 작업을 수행합니다. 각 셀에 자신의 UILabels를 추가하는 것이 더 간단 할 수 있지만 다른 방법을 찾기로 결정했습니다.

// UITableViewCellStyleSubtitle measured font sizes: 18 bold, 14 normal

UIFont *font = [UIFont boldSystemFontOfSize:18]; // measured after the cell is rendered
CGSize size = [cell.textLabel.text sizeWithFont:font];
CGSize spaceSize = [@" " sizeWithFont:font];
float excess_width = ( cell.frame.size.width - 16 ) - size.width;
if ( cell.textLabel.text  &&  spaceSize.width > 0  &&  excess_width > 0 ) { // sanity
    int spaces_needed = (excess_width/2.0)/spaceSize.width;
    NSString *pad = [@"" stringByPaddingToLength:spaces_needed withString:@" " startingAtIndex:0];
    cell.textLabel.text = [pad stringByAppendingString:cell.textLabel.text]; // center the text
}

font = [UIFont systemFontOfSize:14]; // detail, measured
size = [cell.detailTextLabel.text sizeWithFont:font];
spaceSize = [@" " sizeWithFont:font];
excess_width = ( cell.frame.size.width - 16 ) - size.width;
if ( cell.detailTextLabel.text  &&  spaceSize.width > 0  &&  excess_width > 0 ) { // sanity
    int spaces_needed = (excess_width/2.0)/spaceSize.width;
    NSString *pad = [@"" stringByPaddingToLength:spaces_needed withString:@" " startingAtIndex:0];
    cell.detailTextLabel.text = [pad stringByAppendingString:cell.detailTextLabel.text]; // center the text
}

에서 CustomTableViewCell.m:

- (void)layoutSubviews {
  [super layoutSubviews];

    self.textLabel.frame = CGRectMake(0, self.textLabel.frame.origin.y, self.contentView.frame.size.width, self.textLabel.frame.size.height);

}

방법 테이블에서 :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *CellIdentifier = @"Cell";

  CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

  if (cell == nil) {
    cell = [[[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
  }

  cell.textLabel.text = @"Title";
  cell.textLabel.textAlignment = UITextAlignmentCenter;

  return cell;
}

If needed, the same thing can be repeated for self.detailTextLabel


In same situation I created custom UITableViewCell with a custom label:

MCCenterTextCell.h file:

#import <UIKit/UIKit.h>

@interface MCCenterTextCell : UITableViewCell

@property (nonatomic, strong) UILabel *mainLabel;

@end

MCCenterTextCell.m file:

 #import "MCCenterTextCell.h"


@interface MCCenterTextCell()


@end


@implementation MCCenterTextCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

        self.accessoryType = UITableViewCellAccessoryNone;
        self.selectionStyle = UITableViewCellSelectionStyleGray;
        _mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 5, 320, 30)];
        _mainLabel.font = BOLD_FONT(13);
        _mainLabel.textAlignment = NSTextAlignmentCenter;
        [self.contentView addSubview:_mainLabel];

    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}


@end

You could use code to center text

cell.indentationLevel = 1;

cell.indentationWidth = [UIScreen mainScreen].bounds.size.width/2-10;


In case one wish to align the text to the right, I've had success adapting the solution described here.

cell.transform = CGAffineTransformMakeScale(-1.0, 1.0);
cell.textLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0);
cell.detailTextLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0);

Here is what works for me...

NSString *text = @"some text";
CGSize size = [text sizeWithAttributes:@{NSFontAttributeName:SOME_UIFONT}];

[cell setIndentationLevel:1];
[cell setIndentationWidth:(tableView.frame.size.width - size.width)/2.0f];

cell.textLabel.font = SOME_UIFONT;
[cell.textLabel setText:text];

참고URL : https://stackoverflow.com/questions/3467288/center-align-text-in-uitableviewcell-problem

반응형