2012-06-28 12 views
8

tôi muốn thay đổi UITextView lập trình với số lượng văn bản tôi đặt, và tôi có một vấn đề, nếu tôi thêm một sự UITextView với xây dựng giao diện và tôi làm điều này:thay đổi UITextView chiều cao theo chương trình với nội dung

CGRect frame = textViewA1.frame; 
frame.size.height = textViewA1.contentSize.height; 
textViewA1.frame = frame; 

tất cả làm việc tốt, nhưng nếu tôi tạo UITextView lập trình, chiều cao không thay đổi, tôi làm điều này:

UITextView *textViewA1 = [[UITextView alloc] initWithFrame:CGRectMake(5, 5, 320, 50)]; 
[textViewA1 setFont:[UIFont fontWithName:@"Enriqueta" size:15]]; 
[textViewA1 setScrollEnabled:NO]; 
[textViewA1 setUserInteractionEnabled:NO]; 
[textViewA1 setBackgroundColor:[UIColor clearColor]]; 
[textViewA1 setText:@"A lot of text"]; 
CGRect frame = textViewA1.frame; 
frame.size.height = textViewA1.contentSize.height; 
textViewA1.frame = frame; 

theo cách này kích thước chiều cao của uitextview không thay đổi, làm thế nào tôi có thể làm gì?

Trả lời

9

tôi nghĩ rằng bạn cần phải làm:

CGRect frame = textViewA1.frame; 
frame.size.height = textViewA1.contentSize.height; 
textViewA1.frame = frame; 

sau addSubview:

[self.view addSubview: self.textView]; 
+0

Lời cảm ơn hoàn hảo :) – Supertecnoboff

+0

u r great dude ... –

0

Bạn cần phải tính toán kích thước khung hình cho các văn bản mà bạn có, ví dụ:

UIFont *font = [UIFont fontWithName:@"Enriqueta" size:15]; 
NSString *text = @"A lot of text"; 
CGSize frameSize = [text sizeWithFont:font]; 
CGRect originalFrame = textViewA1.frame; 
textViewA1.frame = CGRectMake(CGRectGetMinX(originalFrame), CGRectGetMinY(originalFrame), frameSize.width, frameSize.height); 

Để giữ cho nó khỏi vượt quá một chiều cao đặc biệt, sử dụng:

CGFloat maxHeight = 100; // or something 
CGSize frameSize = [text sizeWithFont:font constrainedToSize:maxHeight]; 
+0

Để constrainedSize Hãy cho tôi lỗi này: Gửi 'CGFloat' (a ka 'float') để tham số kiểu không tương thích 'CGSize' (aka 'struct CGSize'); , và tôi có một câu hỏi khác, làm thế nào tôi có thể hạn chế chỉ với chiều rộng? – Piero

+0

Chỉ cần sử dụng số lớn thực sự cho tham số chiều cao của thường trình constrainedToSize. Cung cấp cho nó chiều rộng tĩnh đã biết của bạn, và một số thực sự lớn cho chiều cao. Phương pháp sau đó sẽ trả lại kích thước thực tế cần thiết !!! Điều này không thành công vì hàm đó có trong CGSize. – trumpetlicks

+0

@Piero - Để sửa lỗi "Gửi" CGFloat "của bạn tới tham số không tương thích ...", hãy thử điều này 'CGSize maxSize = CGSizeMake (100, 100);' thay vì 'CGFloat maxHeight = 100'. – pasawaya

0

Hãy thử mã này

UIFont * font = [UIFont fontWithName:@"Enriqueta" size:15]; 
textViewA1.font = font; 
NSString * theText = @"A lot of text"; 
CGSize theStringSize = [theText sizeWithFont:font constrainedToSize:CGSizeMake(190, 1000000) lineBreakMode:UILineBreakModeWordWrap]; 
CGRect frame = textViewA1.frame; 
frame.size.height = theStringSize.height; 
textViewA1.frame = frame; 

Điều này tất nhiên có chiều rộng tĩnh là 190 pixel cho lượt xem văn bản. Bạn rõ ràng có thể thay đổi điều đó !!!

10

Chỉ cần gửi thông báo sizeToFit tới UITextView. Nó sẽ điều chỉnh chiều cao của nó để vừa với văn bản của nó. Nó sẽ không thay đổi chiều rộng hoặc nguồn gốc của nó.

[textViewA1 sizeToFit]; 
+1

Nó thực sự có thể thay đổi chiều rộng. Nó phụ thuộc rất nhiều vào khung nhìn cha mẹ và các thuộc tính kích thước của các phần phụ khác của phụ huynh. Đây là trường hợp sử dụng rất "nó phụ thuộc" !!! Câu trả lời hay được thêm vào mặc dù :-) – trumpetlicks

+0

Hãy mô tả một kịch bản (ngoài việc sử dụng bố cục văn bản theo chiều dọc) trong đó 'UITextView' sẽ thay đổi chiều rộng của nó để đáp ứng với' sizeToFit'. Tôi đã không tìm thấy một trong thử nghiệm của tôi. –

+0

nếu chiều rộng ban đầu được đưa ra cho textView nhỏ hơn chiều rộng của văn bản gốc và không có gì bên cạnh nó trái hoặc phải, nó có thể tăng chiều rộng của nó để lấp đầy chiều rộng của cha mẹ. NẾU điều này là không đúng, và bạn có bằng chứng, tôi thực sự rất thích nhìn thấy nó, vì nó có thể đơn giản hóa các phần của mã tôi có :-) Cảm ơn bạn đã thông tin. – trumpetlicks

-2

để di chuyển UITextView khi được bổ sung nhiều dòng trong TextView

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
    CGRect frameTextView = textView.frame; 
    frameTextView.height -= KEY_BOARD_HEIGHT; 
    textView.frame = frameTextView; 
} 
- (BOOL)textViewShouldEndEditing:(UITextView *)textView; 
{ 
    CGRect frameTextView = textView.frame; 
    frameTextView.height += KEY_BOARD_HEIGHT; 
    textView.frame = frameTextView; 
} 
+0

không phải câu hỏi yêu cầu – Efren