在iOS8中设置scrollEnabled = NO后,UITextView scrollEnabled = YES无法正常工作

时间:2016-05-11 03:13:45

标签: ios objective-c uitextview

我创建了一个用于检查UITextView scrollEnabled的演示。 它只包含1 UITextView和2按钮启用和禁用滚动

  • 我在模拟器和设备iOS 8上测试,如果单击禁用滚动按钮,UITextView将正确禁用滚动,但之后我 点击启用滚动,UITextView 赢了启用滚动

  • 但是,我在设备iOS9上测试,启用和禁用滚动效果很好。

    #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
    

有什么想法解决这个问题吗?如果有人不理解我的解释,请检查 my demo project
任何帮助或建议将非常感谢

8 个答案:

答案 0 :(得分:17)

问题是在iOS 8中,更改scrollEnabled时未正确调整contentSize。对enableScrollButtonPressed方法进行小幅调整将成功解决问题。

-H 'Content-Type:application/json'

答案 1 :(得分:6)

是的,你是正确的禁用和启用textview的滚动在iOS8中不起作用它可能是一个错误或其他任何东西,让它成为。 我们可以通过更改textview的ContentSize 来停用或启用文本视图滚动。

#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

我测试过上面的代码它对我来说很好用我正在使用 xcode 7.2.1 iOS 8.3 。试一试,让我知道结果

答案 2 :(得分:5)

enter image description here搜索了几个小时后,我发现了一种方式

-(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;
});

}

条件是你需要首先滚动然后它才能完美地运作

表示在点击禁用滚动按钮时,应在某个位置滚动textview 不得在默认位置

答案 3 :(得分:4)

Please follow below steps simply
self.myTextView.scrollEnabled = NO;
self.myTextView.userInteractionEnabled = YES;
self.myTextView.scrollEnabled = YES;

答案 4 :(得分:3)

您需要在视图中启用或禁用滚动视图后布局视图。

使用viewWillLayoutSubviews / layoutIfNeeded方法。

答案 5 :(得分:3)

我尝试了我的代码,但它运行正常

IBOutlet UITextView *tv;

//---------Enable button action.

-(IBAction)enable:(id)sender
{
    tv.scrollEnabled=YES;
}

//---------Disable button action.

-(IBAction)disable:(id)sender
{
    tv.scrollEnabled=NO;
}

在设备中再次尝试使用您的代码。

答案 6 :(得分:3)

按如下方式更改您的财产。

你的代码中的

..

@property (weak, nonatomic) IBOutlet UITextView *myTextView;

更改属性属性如下:

@property (strong, nonatomic) IBOutlet UITextView *myTextView;

然后它会正常工作。我查了一下。

答案 7 :(得分:0)

试试这个

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    tableView.setContentOffset(CGPoint.zero, animated: false)
}