UITextView setContentOffset:layoutSubviews中的CGPointZero在iOS8中不起作用

时间:2016-05-11 02:25:02

标签: ios ios8 uitextview

我的PopupView扩展了UIView。在PopupView我有一个UITextViewPopupView显示时,我的UITextView不会从第一行开始(它会向下滚动一点点) 因此,我使用下面的代码在UITextView出现后将PopupView滚动到顶部

- (void)layoutSubviews{
    [super layoutSubviews];

    [self.contentTextView setContentOffset:CGPointZero animated:NO];
}

它在iOS9(设备和模拟器)中运行良好但在iOS8中不起作用 任何想法来解决它。 任何帮助都将非常感谢

更新

我发现在layoutSubviews之后调用drawRect,如果我在其中setContentOffset:CGPointZero,它将会起作用

-(void)drawRect:(CGRect)rect{
    [self.contentTextView setContentOffset:CGPointZero];
}

但我找到了drawRect的目的:

  

drawRect: - 如果您的视图绘制自定义内容,请实现此方法。   如果您的视图没有进行任何自定义绘图,请避免覆盖它   方法

在我的案例中使用drawRect而不使用layoutSubviews是否合适?

2 个答案:

答案 0 :(得分:2)

根据@longpham说明,drawRect()将使用GPU,因此它并不好。这是解决我的问题的解决方案

-(void)awakeFromNib{
    [super awakeFromNib];
    [self layoutIfNeeded]; // call layoutIfNeeded here to make layoutSubviews get called whenever layout change
}
- (void)layoutSubviews{
    ...
    [self.contentTextView setContentOffset:CGPointZero];
}

答案 1 :(得分:1)

它对我有用

- (void)drawRect:(CGRect)rect {

    self.textView=[[UITextView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];

    [self addSubview:self.textView];

}