我的PopupView
扩展了UIView
。在PopupView
我有一个UITextView
当PopupView
显示时,我的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
是否合适?
答案 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];
}