web-dev-qa-db-fra.com

Texte UITextView ne commençant pas par le haut

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.

enter image description here

45
Nitish

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];

48

dans la méthode viewDidLoad, ajoutez

self.automaticallyAdjustsScrollViewInsets = false
49
masouk

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;
}
24
user4410354

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)
}
20
Tung Fam

C'est ce que j'utilise

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

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
    }
}
0
Alex Curylo

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];
}
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

Solution Swift 4:

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

Voici la réponse

à Swift

termsTextView.contentOffset = CGPointMake(0, -220)

dans Objective-C

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