2013-09-25 25 views
5

Vì một số lý do lạ, văn bản của UITextView của tôi xuất hiện bị cắt khi tập hợp scrollofset được đặt.UITextView, setContentOffset và thiếu phần dưới

Đây là những gì nó trông giống như: enter image description here

Điều này xảy ra sau khi thực hiện:

 textview.contentInset = UIEdgeInsetsZero; 
     [textview setContentOffset:CGPointMake(0, startypos + offset_yshift) animated:NO]; 

tôi đã cố gắng tự thiết lập contentSize.height, nhưng đó giới thiệu một hành vi kỳ lạ, nơi mà nội dung bù đắp có vẻ là bị bỏ qua ..

'' Chỉnh sửa '': Đây là mã được sử dụng để khởi tạo trường văn bản:

CGRect myImageRect = CGRectMake(-50.0f, -50.0f, 40.0f, 40.0f); 
    textview = [[UITextView alloc] initWithFrame: myImageRect]; 
    textview.autocapitalizationType = UITextAutocapitalizationTypeNone; 
    [textview setScrollEnabled:YES]; 
    textview.hidden = YES; 
    textview.contentInset = UIEdgeInsetsZero; 
    textview.opaque = NO; 
    textview.backgroundColor = [UIColor clearColor]; 
    textview.textColor = [UIColor colorWithWhite:1 alpha:1]; 
    textview.textAlignment = NSTextAlignmentCenter; 
    textview.frame = CGRectMake(0, 0, 250, 30); 
    textview.scrollEnabled = NO; 

Và "cập nhật" mã để kiểm tra vị trí nội dung mỗi khung:

// setting the actual size here 
    UITextPosition * pos = [textview positionFromPosition: textview.endOfDocument offset:nil]; 
    CGRect therect = [textview caretRectForPosition:pos]; 

    CGRect frame = textview.frame; 

    if([textview.text length] == 0){ 
    frame.size.height = 30; 
    } else { 
    frame.size.height = therect.origin.y + therect.size.height; 
    } 

    // and here, we're changing the frame variable's height to max to 50 
    if(frame.size.height > 50){ 
    frame.size.height = 50; 
    } 
    frame.size.width = desiredwidth; // some other variable 

    textview.frame = frame; 

    /* 

    ... snip, unrelated code ... 

    */ 

    // later on 

     textview.contentInset = UIEdgeInsetsZero; 
     [textview setContentOffset:CGPointMake(0, startypos + offset_yshift) animated:NO]; 

Như bạn có thể tưởng tượng, setContentOffset cắn có là những gì gây ra vấn đề.

Điều gì đang xảy ra?

+0

Bạn đã thử 'hack' được mô tả ở đây chưa? http://stackoverflow.com/a/19137163/1153630 –

Trả lời

1

Tôi đã gặp phải sự cố tương tự trong iOS7 với UITextField - trông gần giống hệt nhau. Tôi đã phải làm với insets nội dung là tốt.

Giải pháp (đối với tôi) - là loại bỏ UITextField khỏi nib/storyboard và khởi tạo nó và thêm nó vào khung nhìn hoàn toàn từ mã. Hành vi làm việc như mong đợi sau đó.

Tôi không biết điều gì khác hơn là có thể là lỗi iOS7/XCode 5 ... Tò mò để biết liệu điều đó có giải quyết được cho bạn hay không.

+0

Hmm, tiếc là UITextField của tôi đã được khởi tạo từ mã:/ – kamziro

+0

Huh - Bạn có phiền khi ném tất cả mã bạn sử dụng để khởi tạo nó không? Rất thích thử và tái sản xuất. Tôi thề tôi đã có cùng một vấn đề một vài ngày trước; và nghĩ rằng tôi đã sửa nó bằng cách lấy nó ra khỏi ngòi ... có lẽ tôi không nhớ lại những gì tôi đã làm. –

1

Thận trọng của tôi là điều chỉnh kích thước của UITextView dựa trên nội dung của nó.

Giống như hỏi ở đây: how-do-i-size-a-uitextview-to-its-content

Mã lấy từ câu trả lời của jhibberd

- (void)textViewDidChange::(UITextView *)textView 
    { 
     CGFloat fixedWidth = textView.frame.size.width; 
     CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)]; 
     CGRect newFrame = textView.frame; 
     newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height); 
     textView.frame = newFrame; 
    } 
+0

@jhibberd, tạo Câu trả lời của riêng bạn và tôi sẽ loại bỏ câu trả lời của tôi, do đó giải pháp của bạn tôi đã trình bày – CodeFanatic

+0

Đó là tình hình hiện tại của tôi, nhưng tôi muốn cuộn xuống nếu nội dung của chế độ xem văn bản quá lớn. Hiện tại hộp văn bản chỉ thay đổi kích thước lớn như nó cần, và đó là một vấn đề bởi vì một số văn bản là quá lớn và mất tất cả các màn hình. Và nếu tôi đặt một giới hạn về kích thước khung hình, tốt .. điều tôi mô tả xảy ra. – kamziro

3

hãy thử này từ bài trước

CGPoint offset = CGPointMake(0, self.textView.contentSize.height - self.textView.frame.size.height); 
[self.textView setContentOffset: CGPointMake(0,0) animated:NO]; 
or 
[self.textView setContentOffset:bottomOffset animated:YES]; 

[post]: UITextView contentOffset on iOS 7 "trước bài" \

+0

Có vẻ như không hoạt động:/Sử dụng mã ở trên vì nó, setContentOffset thứ hai có vẻ như không có gì (nó vẫn được cuộn ở trên cùng), ngay cả khi con trỏ văn bản là tất cả các cách ở dưới cùng.Thay đổi hoạt ảnh: YES thành hoạt ảnh: NO vô hiệu hóa setContentOffset đầu tiên. – kamziro

Các vấn đề liên quan