2013-10-04 54 views
2

我想創建一個具有像iOS 7的Notes應用程序的功能的應用程序。基本上,頂部有一排有日期和時間。UITableView裏面的UITextView不會向上滾動,當返回鍵時

我的解決方案是把UITextView放入UITableView。第一行是帶日期和時間的UILabel,第二行是UITextView。

根據UITextView ContentSize更改UITextView和UITableViewCell高度。

問題是UITextView的尺寸很大,所以當用戶點擊返回鍵時它不會自動滾動。

是否有任何解決方案,使其正常滾動?

回答

1

UITextViewUIScrollView的子類。我會建議一種實現類似功能的替代方法。將標籤視圖添加爲文本視圖的子視圖,並設置標籤高度的最高值。

UILabel* label = [UILabel new]; 
label.text = @"Test"; 
[label sizeToFit]; 

CGRect frame = label.frame; 
frame.origin.y -= frame.size.height; 
[label setFrame:frame]; 

[self.textView addSubview:label]; 

[self.textView setContentInset:UIEdgeInsetsMake(label.frame.size.height, 0, 0, 0)]; 

示例項目: http://sdrv.ms/16JUlVD

+0

我試過這個下面的代碼,顯示在UITextView之上的UILabel,但是當UITextView被滾動時它不滾動。 'UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(20,20,200,44)]; [label setText:@「date and time」]; [self.testTextView setContentInset:UIEdgeInsetsMake(label.frame.size.height,0,0,0)]; [self.testTextView addSubview:label];' – wint

+0

我剛測試過它,它的工作方式和我的預期一樣。確保啓用「水平反彈」,否則只有當文本長於文本視圖邊界時纔會滾動。 –

+0

請參閱編輯示例代碼。 –

0

嘗試這種解決方案。修復基於繼承。但是,在UITextView文本被改變之後,可以在任何地方使用邏輯。我已經採取了一些有用的代碼塊從這裏開始:

http://craigipedia.blogspot.ru/2013/09/last-lines-of-uitextview-may-scroll.html

和編輯的我要我的解決方案。 應該工作。

@interface CustomTextView : UITextView 

@end 

@implementation CustomTextView 

-(id)init { 
    self = [super init]; 
    if (self) { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextViewTextDidChangeNotification object:self]; 
    } 
    return self; 
} 

-(void)textDidChange:(NSNotification *)notification { 

    //iOS 7 UITextView auto scroll fix. 
    NSRange caretRange = self.selectedRange; 
    if (caretRange.location == self.text.length) { 
     CGRect textRect = [self.layoutManager usedRectForTextContainer:self.textContainer]; 
     CGFloat sizeAdjustment = self.font.lineHeight * [UIScreen mainScreen].scale; 

     if (textRect.size.height >= self.frame.size.height - sizeAdjustment) { 
      if ([[self.text substringFromIndex:self.text.length - 1] isEqualToString:@"\n"]) { 
       [UIView animateWithDuration:0.2 animations:^{ 
        [self setContentOffset:CGPointMake(self.contentOffset.x, self.contentOffset.y + sizeAdjustment)]; 
       }]; 
      } 
     } 
    } 
    //end of fix 
} 

@end 
相關問題