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

标签 iphone ios objective-c uiscrollview

我的应用程序中有一个 ScrollView ,它是通过 Storyboard初始化的,我正在尝试更改框架。一切似乎都正常,但如果框架和内容大小在设置后不久就被访问,但在我的方法返回后,它们就不一样了!这是代码:

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);

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

<UIScrollView: 0x808de00; frame = (0 0; 320 81); ... >

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

<UIScrollView: 0x808de00; frame = (0 0; 320 416); ... >

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

(width=320, height=416)

(width=320, height=504)

这两个值似乎都自动恢复到 View 首次布局时的值。我在我的 ScrollView 的getter和setter中设置了断点,并没有发现任何意外的访问,所以我断定变化必须来自内部。这是一个合理的结论吗?可能出了什么问题?

最佳答案

如果您使用自动布局,您应该更改约束,而不是设置 ScrollView 的框架。

请参阅我对类似问题的回答 here .它有一些指向如何以编程方式设置约束的示例的链接。

此外,您在哪种方法中设置了framecontentSize?由于您使用的是 Storyboard,如果它在 viewDidLoadviewWillAppear: 中,最好将此代码移至 viewDidLayoutSubviews

关于iphone - UIScrollView 神秘地改变框架和内容大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17667662/

相关文章:

iphone - 为什么我的录音无法播放? (iPhone SDK)

iphone - iPhone 中的蓝牙

objective-c - 在哪里可以找到有关适用于 Swift 的 AWS API 的优秀文档? (我找到的大部分是针对 Objective-C 的)

ios - Amazon Mobile Hub/Amazon Web Services 中的自定义身份提供商

iPhone 应用程序发送电子邮件

iphone - 无法更改字幕中 UILabel 的框架

ios - CoreData 与归档?

ios - 不能使用在 Swift 中使用的 Objective-C 中定义的 unwind segue

ios - 在纯编程的 swift ios 应用程序中创建和利用可重用组件的策略? (UIKit 不是 SwiftUI)

ios - 如何更改我的 iOS 应用程序的权利?