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
,因此您再次将框架重置为不正确的大小。
我的视图控制器中有一个 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
,因此您再次将框架重置为不正确的大小。