Je crée une démo pour vérifier UITextView scrollEnabled
. Il ne contient que 1 UITextView
et 2 boutons activer et désactiver le défilement
Je teste sur le simulateur et le périphérique iOS 8, si je clique sur le bouton de défilement désactivé, la UITextView
désactive le défilement correctement, mais après cela, je Clique sur activer le défilement, la UITextView
non activer faire défiler
Cependant, je teste sur le périphérique iOS9, l'activation et la désactivation du défilement fonctionnent bien.
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextView *myTextView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (IBAction)enableScrollButtonPressed:(id)sender{
self.myTextView.scrollEnabled = YES;
}
- (IBAction)disableScrollButtonPressed:(id)sender{
self.myTextView.scrollEnabled = NO;
}
@end
Une idée pour résoudre ce problème? Si quelqu'un ne comprend pas mon explication, veuillez vérifier mon projet de démonstration
Toute aide ou suggestion serait la bienvenue
Le problème est que dans iOS 8, contentSize n'est pas ajusté correctement lorsque scrollEnabled est modifié. Un petit ajustement de votre méthode enableScrollButtonPressed permettra de résoudre le problème.
-(IBAction)enableScrollButtonPressed:(id)sender
{
self.myTextView.scrollEnabled = YES;
self.myTextView.contentSize = [self.myTextView sizeThatFits:self.myTextView.frame.size];
}
Oui, vous avez raison de désactiver et d’activer le défilement de textview ne fonctionne pas dans iOS8; il peut s’agir d’un bogue ou de quelque chose d’autre, qu’il en soit ainsi. Nous pouvons désactiver ou activer le défilement de la vue du texte simplement changer le textview.
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextView *myTextView;
@end
@implementation ViewController
-(IBAction)enableScrollButtonPressed:(id)sender{
CGSize scrollableSize = CGSizeMake(self.myTextView.bounds.size.width+20, self.myTextView.bounds.size.height+20);
[self.myTextView setContentSize:scrollableSize];
}
-(IBAction)disableScrollButtonPressed:(id)sender{
[self.myTextView setContentOffset:CGPointMake(0, 0)];
[self performSelector:@selector(StopScroll) withObject:nil afterDelay:0.1];
}
-(void)StopScroll{
CGSize scrollableSize = CGSizeMake(self.myTextView.bounds.size.width, self.myTextView.bounds.size.height/2);
[self.myTextView setContentSize:scrollableSize];
}
@end
J'avais testé le code ci-dessus, il fonctionnait bien pour moi. J'utilise xcode 7.2.1et iOS 8.3. Essayez et laissez-moi savoir le résultat
Après des heures de recherche, je suis trouvé un moyen
-(IBAction)enableScrollButtonPressed:(id)sender{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.myTextView.scrollEnabled = YES;
[self.myTextView setText:self.myTextView.text];
self.myTextView.layoutManager.allowsNonContiguousLayout = false;
});
}
-(IBAction)disableScrollButtonPressed:(id)sender{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.myTextView.scrollEnabled = NO;
});
}
condition pour cela est que vous devez faire défiler en premier alors vous cela fonctionnera parfaitement
Signifie que lorsque le bouton de défilement est désactivé, textview doit défiler à une positionne doit pas être à la position par défaut
Please follow below steps simply
self.myTextView.scrollEnabled = NO;
self.myTextView.userInteractionEnabled = YES;
self.myTextView.scrollEnabled = YES;
changez votre propriété comme suit.
dans votre code ..
@property (weak, nonatomic) IBOutlet UITextView *myTextView;
changez l'attribut de propriété comme suit:
@property (strong, nonatomic) IBOutlet UITextView *myTextView;
alors ça fonctionnera bien. Je l'ai vérifié.
J'ai essayé mon code et cela a fonctionné correctement
IBOutlet UITextView *tv;
//---------Enable button action.
-(IBAction)enable:(id)sender
{
tv.scrollEnabled=YES;
}
//---------Disable button action.
-(IBAction)disable:(id)sender
{
tv.scrollEnabled=NO;
}
essayez votre code une fois de plus dans l'appareil.
vous devez disposer vos vues après avoir activé ou désactivé l'affichage par défilement dans votre vue.
utilisez les méthodes viewWillLayoutSubviews/layoutIfNeeded.
Essaye celui-là
func scrollViewDidScroll(_ scrollView: UIScrollView) {
tableView.setContentOffset(CGPoint.zero, animated: false)
}