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
は右側にあります。
UITextViewでこのようなコンテンツインセットを設定します
youtextView.contentInset = UIEdgeInsetsMake(-7.0,0.0,0,0.0);
Top値を希望する方法で調整します。このシャウドはあなたの問題を解決します。
編集:
IOS7以降で問題が発生した場合は、使用してみてください...
[yourTextView setContentOffset:CGPointMake(x、y)animated:BOOL];
viewDidLoadメソッドで
self.automaticallyAdjustsScrollViewInsets = false
私はこのようにしました。スクロールが無効の場合、テキストは上から読み込まれます。ロード後にスクロールを有効にします。
- (void)viewDidLoad{
myTextView.scrollEnabled = NO;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
myTextView.scrollEnabled = YES;
}
既存のソリューションはどれも役に立たなかったが、これはhelped:
Objective-C:
- (void)viewDidLayoutSubviews {
[self.yourTextView setContentOffset:CGPointZero animated:NO];
}
Swift:
override func viewDidLayoutSubviews() {
textView.setContentOffset(CGPoint(x: 0, y: 0), animated: false)
}
これは私が使用するものです
textView.textContainerInset =
UIEdgeInsetsMake(
0,
-textView.textContainer.lineFragmentPadding,
0,
-textView.textContainer.lineFragmentPadding
)
;
ストーリーボードにレイアウトされたテキストビューを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
}
}
これは、iOS 7と8の両方でautoresizingMask
のUITextView
プロパティを設定した後に発生します。
オプションの回避策を見つけました:
- (void)viewWillAppear:(BOOL)animated {
[super viewDidAppear:animated];
[yourTextView scrollRectToVisible:CGRectMake(0, 0, yourTextView.contentSize.width, 10) animated:NO];
}
- (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};
}
Swift 4ソリューション:
self.textView.scrollRangeToVisible(NSMakeRange(0, 0))
答えはこちら
スイフトで
termsTextView.contentOffset = CGPointMake(0, -220)
objective-Cで
[termsTextView setContentOffset: CGPointMake(0,-220) animated:NO];