web-dev-qa-db-ja.com

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

45
Nitish

UITextViewでこのようなコンテンツインセットを設定します

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

Top値を希望する方法で調整します。このシャウドはあなたの問題を解決します。

編集:

IOS7以降で問題が発生した場合は、使用してみてください...

[yourTextView setContentOffset:CGPointMake(x、y)animated:BOOL];

48

viewDidLoadメソッドで

self.automaticallyAdjustsScrollViewInsets = false
49
masouk

私はこのようにしました。スクロールが無効の場合、テキストは上から読み込まれます。ロード後にスクロールを有効にします。

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

既存のソリューションはどれも役に立たなかったが、これはhelped

Objective-C:

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

Swift

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

これは私が使用するものです

textView.textContainerInset = 
    UIEdgeInsetsMake(
        0,
        -textView.textContainer.lineFragmentPadding, 
        0, 
        -textView.textContainer.lineFragmentPadding
    )
;
3
Fahim Parkar

ストーリーボードにレイアウトされたテキストビューをView Controller管理を追加せずに適切にロードする場合は、これを実行します(iOS 12、Swift 4.2):

final class UITopLoadingTextView: UITextView {

    var shouldEnableScroll = false

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        shouldEnableScroll = isScrollEnabled
        self.isScrollEnabled = false
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        isScrollEnabled = shouldEnableScroll
    }
}
0
Alex Curylo

これは、iOS 7と8の両方でautoresizingMaskUITextViewプロパティを設定した後に発生します。

オプションの回避策を見つけました:

- (void)viewWillAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [yourTextView scrollRectToVisible:CGRectMake(0, 0, yourTextView.contentSize.width, 10) animated:NO];
}
0
liushuaikobe
- (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};
}
0
chandan

Swift 4ソリューション:

self.textView.scrollRangeToVisible(NSMakeRange(0, 0))
0
levan

答えはこちら

スイフトで

termsTextView.contentOffset = CGPointMake(0, -220)

objective-Cで

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