2012-06-27 46 views
5

Tôi muốn văn bản của mình phải được căn chỉnh ngay.Căn chỉnh văn bản UILabel phải

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"lisn"]; 
cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"lisn"] autorelease]; 
CGSize textSize = { 210.0, 10000.0 }; 
CGSize size = [[gMessageArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap]; 

UILabel *lisnerMessage=[[[UILabel alloc] init] autorelease]; 
lisnerMessage.backgroundColor = [UIColor clearColor]; 
[lisnerMessage setFrame:CGRectMake(75 ,20,size.width + 5,size.height+2)]; 
lisnerMessage.numberOfLines=0; 
lisnerMessage.textAlignment=UITextAlignmentRight; 
lisnerMessage.text=[gMessageArray objectAtIndex:indexPath.row]; 
[cell.contentView addSubview:lisnerMessage]; 
return cell 
} 

nhưng văn bản của tôi không được sắp xếp đúng Xin vui lòng giúp

+0

Đây không phải là một câu trả lời cho câu hỏi của bạn, nhưng một lời nhận xét về logic. Bạn có chắc chắn muốn thêm nhãn phụ vào ô của mình mỗi khi bảng được làm mới không? –

+0

@PhillipMills: cho mỗi ô tôi có văn bản khác nhau, không thêm văn bản trong ô đó –

+0

Trừ khi có mã ở đâu đó xóa nhãn cũ khỏi ô của bạn, những gì bạn đăng sẽ luôn thêm một nhãn nữa mỗi khi được gọi cho đường dẫn chỉ mục cụ thể . –

Trả lời

9

Bởi vì bạn đang sử dụng sizeWithFont và sau đó thiết lập khung hình của bạn để kích thước đó, văn bản của bạn được chỉnh lề phải. Hãy thử thêm màu nền của màu xám nhạt vào nhãn của bạn để xem những gì tôi đang nói đến. Nhãn của bạn phải được đặt thành cùng kích thước với ô bảng của bạn và cho phép văn bản xuất hiện bên trong nó. Sau đó, nó sẽ sắp xếp bên phải.

Cập nhật với mẫu

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"lisn"]; 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"lisn"]; 

    UILabel *lisnerMessage = [[UILabel alloc] init]; 
    lisnerMessage.backgroundColor = [UIColor clearColor]; 
    [lisnerMessage setFrame:cell.frame]; 
    lisnerMessage.numberOfLines = 0; 
    lisnerMessage.textAlignment = NSTextAlignmentRight; 
    lisnerMessage.text = [gMessageArray objectAtIndex:indexPath.row]; 
    [cell.contentView addSubview:lisnerMessage]; 

    return cell 
} 
+0

: bạn có thể vui lòng xây dựng hoặc đặt một số mã liên quan đến câu trả lời của bạn không. Nó wiil rất hữu ích cho tôi –

+1

Vâng, mẹo với màu nền khác nhau là tốt nhất. Nó sẽ giúp Alok hiểu điều gì xảy ra. Sử dụng sizeWithFont là ok về nguyên tắc, nhưng tôi sẽ không sử dụng size.with cho frame. Sử dụng [lisnerMessage setFrame: CGRectMake (75, 20, textSize.width + 5, size.height + 2)]; thay thế. –

+0

Tôi đã chỉnh sửa mã của bạn bằng một ví dụ thô về những thay đổi cần thiết. Tôi đã không thử nghiệm nó trong Xcode nhưng đó là ý tưởng. chỉ cần xây dựng lại logic của bạn cho phù hợp. –

0

Tại sao bạn không chỉ làm cho nhãn trong xây dựng giao diện/kịch bản và chọn tùy chọn "ngay thẳng"? Sau đó kết nối nó với tư cách là một thuộc tính có tên là lisnerMessage và lisnerMessage.text=[gMessageArray objectAtIndex:indexPath.row]; Điều đó sẽ giảm đáng kể lượng mã bạn đang viết và chắc chắn hoạt động.

1

Cuối cùng tôi đã khắc phục được sự cố của mình. Tôi đã phạm sai lầm nhỏ

[lisnerMessage setFrame:CGRectMake(75 ,20,size.width + 5,size.height+2)]; 

Tôi chỉ xóa size.width và cho tọa độ cụ thể 200 của tôi sau khi văn bản được căn chỉnh đúng.

[lisnerMessage setFrame:CGRectMake(75 ,20,200,size.height+2)]; 

Cảm ơn tất cả các trả lời của bạn

5

liên kết phải cho nhãn

yourLabel.textAlignment = NSTextAlignmentRight; 
Các vấn đề liên quan