2012-05-29 101 views
35

我有UITextView。我希望它的文本從頂端開始,但我不是從頂端開始。請在我的代碼看看:UITextView文本不從頂部開始

UITextView *myTextView = [[UITextView alloc] init]; 
myTextView.frame = rect; 
myTextView.editable = NO; 
myTextView.font = [UIFont fontWithName:@"Helvetica" size:MAIN_FONT_SIZE]; 
myTextView.backgroundColor = [UIColor clearColor]; 
myTextView.text = sourceNode.label; 
myTextView.dataDetectorTypes = UIDataDetectorTypeAll; 
[cell.contentView addSubview:myTextView]; 
[myTextView sizeToFit]; 
[self alignTextToTopTextView:myTextView]; 

alignTextToTopTextView

-(void)alignTextToTopTextView :(UITextView*)textView{ 

    CGRect frame = textView.frame; 
    frame.size.height = textView.contentSize.height; 
    textView.frame = frame; 
} 

請看下面的截圖

UITextView是在右邊。

enter image description here

+0

包含屏幕截圖以說明您遇到的問題可能很有用 –

+0

請參閱我編輯的問題。 – Nitish

+0

@Nitish,textview的字體大小是相同的? – Tirth

回答

45

設置內容插圖像這樣在你的UITextView

youtextView.contentInset = UIEdgeInsetsMake(-7.0,0.0,0,0.0); 

調整前值你所希望的方式。這應該解決你的問題。

編輯:

如果您遇到與iOS7以上問題,請嘗試使用...

[yourTextView setContentOffset:CGPointMake(X,Y)動畫:BOOL]。

+1

完美的人。謝謝。 –

+0

另外我把正確的工作答案,如果任何一個感興趣:) –

+3

看起來不錯,但你知道如何計算頂部插入,而不是設置一個固定值? – daisy

0
- (void) viewDidLoad { 
    [textField addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL]; 
    [super viewDidLoad]; 
} 

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    UITextView *tv = object; 
    //Center vertical alignment 
    //CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0; 
    //topCorrect = (topCorrect < 0.0 ? 0.0 : topCorrect); 
    //tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect}; 

    //Bottom vertical alignment 
    CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height); 
    topCorrect = (topCorrect <0.0 ? 0.0 : topCorrect); 
    tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect}; 
} 
48
在viewDidLoad方法

添加

self.automaticallyAdjustsScrollViewInsets = false 
+0

如果我添加這一行,並且文本很長,這根本就沒有任何意義。所以我不會來這裏尋求解決辦法。 –

+0

@crazy_phage即使使用長文本,它也能正常工作,也許你有一些其他的約束可以禁用你的解決方案 –

+0

是的,也許,那時我正在使用sb,也有一些奇怪的代碼。 –

0

下面是答案

在夫特

termsTextView.contentOffset = CGPointMake(0, -220) 

目標C

[termsTextView setContentOffset: CGPointMake(0,-220) animated:NO]; 
+1

你的Swift代碼不是Objective-C的正確版本。它應該是'yourTextView.setContentOffset(CGPoint(x:0,y:-220),animated:true)' –

+0

這是我工作正確的代碼!做得好Sameera – Radu

+4

建議編輯: 'myTextView.contentOffset = CGPointMake(0,-myTextView.contentSize.height)' 原理:OP的UITextView被稱爲'myTextView',而不是'termsTextView'。動態拉動高度使得答案對其他讀者更有用(我希望),例如那些在Interface Builder中創建UITextView的人。 – bjornte

0

出現這種情況我設置UITextViewautoresizingMask財產不論是iOS 7和8

後,我發現了一個可選的解決方法:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [yourTextView scrollRectToVisible:CGRectMake(0, 0, yourTextView.contentSize.width, 10) animated:NO]; 
} 
17

我這樣做的方式。當滾動禁用時,文本從頂部加載。加載後比啓用滾動。

- (void)viewDidLoad{ 
myTextView.scrollEnabled = NO; 
}  
- (void)viewDidAppear:(BOOL)animated { 
[super viewDidAppear:animated]; 
myTextView.scrollEnabled = YES; 
} 
+1

謝謝你,它的工作 – Wilson

+2

這是一個解決方案。 (使用swift3的iOS10.2) –

10

無現有解決方案的幫助,但這個幫助

的Objective-C:

- (void)viewDidLayoutSubviews { 
    [self.yourTextView setContentOffset:CGPointZero animated:NO]; 
} 

斯威夫特3

override func viewDidLayoutSubviews() { 
    textView.setContentOffset(CGPoint(x: 0, y: 0), animated: false) 
} 
2

這是什麼我使用

textView.textContainerInset = 
    UIEdgeInsetsMake(
     0, 
     -textView.textContainer.lineFragmentPadding, 
     0, 
     -textView.textContainer.lineFragmentPadding 
    ) 
; 
-1

self.yourTextView.scrollEnabled = NO;

self.yourTextView.textContainerInset = UIEdgeInsetsMake(0,0,0,0);

+0

僅有代碼的答案不被認爲是很好的答案。請通過提供更多的上下文和解釋來改進您的答案。 – ckruczek