J'ai un UITextView
. Je veux que son texte commence par le haut mais je ne viens pas du haut. Veuillez consulter mon code:
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;
}
Veuillez voir la capture d'écran ci-dessous.
UITextView
est sur le côté droit.
Définissez l'encart de contenu comme ceci dans votre UITextView
youtextView.contentInset = UIEdgeInsetsMake(-7.0,0.0,0,0.0);
Ajustez la valeur supérieure comme vous le souhaitez. cela devrait résoudre votre problème.
MODIFIER:
Si vous rencontrez des problèmes avec iOS7 ou supérieur, essayez d'utiliser ...
[yourTextView setContentOffset: CGPointMake (x, y) animé: BOOL];
dans la méthode viewDidLoad, ajoutez
self.automaticallyAdjustsScrollViewInsets = false
J'ai fait comme ça. Lorsque le défilement est désactivé, le texte est chargé par le haut. Après le chargement, activez le défilement.
- (void)viewDidLoad{
myTextView.scrollEnabled = NO;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
myTextView.scrollEnabled = YES;
}
Aucune des solutions existantes n'a aidé, mais cela aidé:
Objectif c:
- (void)viewDidLayoutSubviews {
[self.yourTextView setContentOffset:CGPointZero animated:NO];
}
Swift:
override func viewDidLayoutSubviews() {
textView.setContentOffset(CGPoint(x: 0, y: 0), animated: false)
}
C'est ce que j'utilise
textView.textContainerInset =
UIEdgeInsetsMake(
0,
-textView.textContainer.lineFragmentPadding,
0,
-textView.textContainer.lineFragmentPadding
)
;
Si vous voulez juste que les vues de texte présentées dans les storyboards se chargent correctement sans ajouter la gestion du contrôleur de vue, cela le fera (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
}
}
Cela se produit après avoir défini la propriété autoresizingMask
de UITextView
dans iOS 7 et 8.
J'ai trouvé une solution de contournement facultative:
- (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};
}
Solution Swift 4:
self.textView.scrollRangeToVisible(NSMakeRange(0, 0))
Voici la réponse
à Swift
termsTextView.contentOffset = CGPointMake(0, -220)
dans Objective-C
[termsTextView setContentOffset: CGPointMake(0,-220) animated:NO];