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
'Programing' 카테고리의 다른 글
파이썬으로 문자열에서 기호를 제거하는 방법은 무엇입니까? (0) | 2020.11.20 |
---|---|
Python에서 가장 최근의 전 영업일 (0) | 2020.11.20 |
Mogenerator 매개 변수는 어떻게 작동하며 Xcode를 통해 전송할 수 있습니까? (0) | 2020.11.20 |
Ubuntu 10.10 (Maverick Meerkat)에 Sun Java JDK를 설치하는 방법은 무엇입니까? (0) | 2020.11.20 |
문자열이 문자열로 시작하는지 테스트 하시겠습니까? (0) | 2020.11.20 |