我的视图控制器中有一个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);
}
我想在用户点按时动态更改滚动视图的高度,但没有任何反应。我没有使用故事板,所以自动布局应该不是问题。为什么滚动视图没有改变?
答案 0 :(得分:1)
设置断点或将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];
}
答案 1 :(得分:1)
当您更改视图的帧时,会调用viewDidLayoutSubviews
,因此您将再次将帧重置为不正确的大小。