iOS:更改视图';机器坏了
我的视图控制器中有一个UIScrollview,我希望动态更改其高度。代码如下:iOS:更改视图';机器坏了,ios,uiscrollview,Ios,Uiscrollview,我的视图控制器中有一个UIScrollview,我希望动态更改其高度。代码如下: - (void)loadView { ... self.myScrollView = [[UIScrollView alloc] initWithFrame:CGRectZero]; self.myScrollView.delegate = self; self.myScrollView.bounces = YES; self.myScrollView.showsHorizo
- (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消息添加到您的VideoTap手势和viewDidLayoutSubviews方法中,并在ViedoTap手势之后查找对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];
}
更改视图的帧时,会调用
viewdilayoutsubviews
,因此您再次将帧重置为不正确的大小。您有self.myScrollView
和self.waveormscrollview
。为什么我们要相信这些是同一件事?而且,你不能证明它们中的任何一个实际上都在接口中。它们应该是一样的。在我的原始代码中,它是waveformScrollView。我只是觉得没有“波形”这个词会更容易理解。你是对的。新大小已被重写回旧大小。是的,它已重置回旧大小