jde*_*man 3 objective-c uiscrollview uiview ios
我正在尝试将子视图添加到UIScrollView.首先,我从故事板中实例化视图控制器,然后将视图的框架设置为应用程序边界.当我将视图添加到UIScrollView时,它显然比它应该的大.
CGRect mainFrame = CGRectMake(0, topButtonHeight, screenWidth, screenHeight);
feelingVC = (FeelingViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"feelingVC"];
feelingVC.delegate = self;
feelingView = feelingVC.view;
[feelingView setFrame:mainFrame];
[self.scrollView addSubview:feelingView];
Run Code Online (Sandbox Code Playgroud)
我可以说,因为它的背景颜色正在延伸到它应该的位置.XCode中的"调试视图层次结构"模式也证实了这一点.但是,如果我检查视图的框架,它会打印出它应该是什么,而不是它实际上是什么.
一个相同大小的视图,但是以编程方式生成,可以正常工作:
mainView = [[UIView alloc] initWithFrame:mainFrame];
mainView.backgroundColor = [UIColor blackColor];
[self.scrollView addSubview:mainView];
Run Code Online (Sandbox Code Playgroud)
我不确定是什么导致这个问题 - 我已经从他们的视图控制器实例化了其他视图,也通过故事板,并设置了他们的框架没有任何问题.
编辑:这是从包含UIScrollView的视图控制器的viewDidLoad调用的.screenWidth&screenHeight是这样计算的(它们是实例变量):
screenWidth = [UIScreen mainScreen].applicationFrame.size.width;
screenHeight = [UIScreen mainScreen].applicationFrame.size.height;
Run Code Online (Sandbox Code Playgroud)
尝试在viewWillAppear方法中设置视图框架.
viewDidLoad 不是设置框架的好地方(因为它在视图加载时只调用一次.),系统尚未正确配置UI组件.
此外,更喜欢使用:
screenWidth = [UIScreen mainScreen].bounds.size.width;
screenHeight = [UIScreen mainScreen].bounds.size.height;
Run Code Online (Sandbox Code Playgroud)
代替
screenWidth = [UIScreen mainScreen].applicationFrame.size.width;
screenHeight = [UIScreen mainScreen].applicationFrame.size.height;
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下考虑到设备的方向,边界具有正确的位置信息.
或者你可以在初始化viewDidLoad:方法内的mainView之后执行此操作
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
mainView.frame = [UIScreen mainScreen].bounds;
}
Run Code Online (Sandbox Code Playgroud)
您还可以添加此项以在子视图更新时重新配置视图框架:
- (void)viewWillLayoutSubviews { //or viewDidLayoutSubviews
[super viewWillLayoutSubviews];
mainView.frame = [UIScreen mainScreen].bounds;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2037 次 |
| 最近记录: |