iOS:更改视图的框架无效

时间:2015-05-22 22:34:31

标签: ios uiscrollview

我的视图控制器中有一个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);    
}

我想在用户点按时动态更改滚动视图的高度,但没有任何反应。我没有使用故事板,所以自动布局应该不是问题。为什么滚动视图没有改变?

2 个答案:

答案 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,因此您将再次将帧重置为不正确的大小。