[英]iOS: Changing view's frame is not working
我的视图控制器中有一个UIScrollview,我想动态更改其高度。 这是代码:
- (void)loadView
{
...
self.myScrollView = [[UIScrollView alloc] initWithFrame:CGRectZero];
self.myScrollView.delegate = self;
self.myScrollView.bounces = YES;
self.myScrollView.showsHorizontalScrollIndicator = NO;
...
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
self.myScrollView.frame = CGRectMake(0.0f, 0.0f, 300.0f, 300.0f);
}
- (void)videoTapGesture:(id)sender
{
self.myScrollView.frame = CGRectMake(0.0f, 0.0f, 300.0f, 600.0f);
}
我想在用户点击时动态更改滚动视图的高度,但是什么也没有发生。 我没有使用情节提要,所以自动布局应该没有问题。 为什么滚动视图没有变化?
设置断点或将NSLog消息添加到videoTapGesture和viewDidLayoutSubviews方法,并在viedeoTapGesture之后查找对viewDidLayoutSubviews的调用。 大小更改很可能正在发生,但是布局会立即覆盖它,因此它无效。
除了执行操作之外,还可以保存所需大小的变量,以使代码中不会混淆大小,例如:
@property (nonatomic) CGFloat desiredHeight;
- (void)loadView {
// ... your existing code, then this line:
self.desiredHeight = 300;
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
self.waveformScrollView.frame = CGRectMake(0.0f, 0.0f, 300.0f, self.desiredHeight);
}
- (void)videoTapGesture:(id)sender
{
self.desiredHeight = 600;
[self setNeedsLayout];
}
更改视图的框架时,将调用viewDidLayoutSubviews
,因此您将框架再次重置为错误的大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.