繁体   English   中英

iOS:更改视图的框架不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM