1

根据我的项目,我将绑定到一个 UIViewController 的默认视图从UIView更改为UIScrollView,因为它必须更改其偏移量和内容大小。我从 UIView 更改为 UIScrollView 的方式是通过Interface Builder > Custom Class

如果我想在控制器中以编程方式更改它的偏移量和内容大小,除非我投射它,否则它不能以通常的方式完成

[((UIScrollView *)self.view) setContentSize:CGSizeMake(1024, 2000)];
[((UIScrollView *)self.view) setContentOffset:CGPointMake(0, 150)];

但是对于应用程序中的其他 UIScrollView,可以像其他任何方式一样更改它们的偏移量和内容大小,

// Assume that sv is scroll view object
[sv setContentSize:CGSizeMake(1027, 2000)];
[sv setContentOffset:CGPointMake(0, 150)];

当我打印该滚动视图对象时,它显示为 UIScrollView

NSLog(@"%@", self.view);
NSLog(@"%@", [self.view class]);

-> <UIScrollView: 0x6d3d3f0; frame = (0 0; 1024 768); autoresize = RM+BM; layer = <CALayer: 0x6d52ce0>; contentOffset: {0, 0}>
-> UIScrollView

任何人都知道我错过或忘记做什么而不是更改视图的自定义类?

最好的,谢谢你,焦油

PS 除了需要额外的代码,一切正常。但是,我不能冒险将来可能出现错误。这位客户超级疯狂,不接受任何错误

4

2 回答 2

2

对此的替代方法(这将避免强制转换)是将 UIViewController 自定义类设置回界面构建器中的 UIView。然后,插入一个新的 UIScrollView 作为子视图(只需在 Interface Builder 中拖放),通过 IBOutlet 将 UIScrollView 连接到 UIViewController 子类,如下所示:

@property (nonatomic, weak) IBOutlet UIScrollView *scrollView;

(当您连接插座时,XCode 应为您生成属性声明)。

然后,在您的 UIViewController 子类中,您可以执行以下操作:

[[self scrollView] setContentSize:CGSizeMake(1024, 2000)];
[[self scrollView] setContentOffset:CGPointMake(0, 150)];
于 2012-04-20T10:05:08.767 回答
0

我不确定最好的解决方案是什么,但一个快速的解决方法是创建一个在 UIViewController 中投射视图的方法。那是:

- (UIScrollView *)scrollView {
   return (UIScrollView *)self.view;
}

然后,不再将 ViewController 中的视图称为 self.view,而是将其称为 self.scrollView。

于 2012-06-27T01:55:22.200 回答