UIScrollView神秘地改变了框架和内容大小

Jum*_*hyn 5 iphone objective-c uiscrollview ios

我的应用程序中有一个滚动视图,通过故事板初始化,我正在尝试更改框架.一切似乎都有效,但如果框架和内容大小在设置后很短的时间内被访问,但在我的方法返回后,它们就不同了!这是代码:

CGFloat inputHeight = inputView.frame.size.height;
originalContentHeight = self.scrollableContentView.frame.size.height;
NSLog(@"%f", self.scrollableContentView.frame.size.height-inputHeight);
[self.scrollableContentView setFrame:CGRectMake(self.scrollableContentView.frame.origin.x, self.scrollableContentView.frame.origin.y, self.scrollableContentView.frame.size.width, self.scrollableContentView.frame.size.height-inputHeight)];
NSLog(@"%f", self.scrollableContentView.frame.size.height);
NSLog(@"%@", self.scrollableContentView);
Run Code Online (Sandbox Code Playgroud)

这些日志的输出都是预期的,即:

<UIScrollView: 0x808de00; frame = (0 0; 320 81); ... >
Run Code Online (Sandbox Code Playgroud)

但是,如果我在另一个方法中设置断点,那么在调用时,记录scrollView会显示:

<UIScrollView: 0x808de00; frame = (0 0; 320 416); ... >
Run Code Online (Sandbox Code Playgroud)

此外,内容大小也会如此变化:

(width=320, height=416)
Run Code Online (Sandbox Code Playgroud)

(width=320, height=504)
Run Code Online (Sandbox Code Playgroud)

这两个值似乎都自动恢复为首次布局视图时的值.我在滚动视图的getter和setter中设置了断点,并且找不到任何意外的访问,因此我得出结论,更改必须在内部进行.这是一个合理的结论吗?怎么可能出错?

Ste*_*arp 6

如果您正在使用自动布局,则应更改约束,而不是设置scrollview的框架.

在此处查看我对类似问题的回答.它有一些链接到如何以编程方式设置约束的示例.

另外,你在哪种方法设置framecontentSize?由于您使用的是故事板,如果它在,viewDidLoad或者viewWillAppear:最好将此代码移动到其中viewDidLayoutSubviews.