视图框架变化对子视图的影响
Effect of change of frame of View on Subviews
我应该知道这一点,但不知道,也找不到任何地方的解释。
我正在 window 的坐标 space 中移动一个 UIView
,并且希望在代码中添加它的子视图(一个 tableView)也能移动。我没有添加任何明确的约束将子视图链接到它的父视图,认为它们会协同移动。然而,据我所知,当我移动 superview 时,tableview 并没有移动。
在代码中创建的子视图不受其父视图坐标更改的影响是否正常?如果是这样,您是否必须在代码中添加约束,是否应该在移动父视图的同时手动移动子视图,或者如何让子视图同时移动?这是代码:
//Create view and subview (tableView):
myView= [UIView new];
CGFloat width = self.view.frame.size.width;
CGFloat height=self.tableView.frame.size.height;
//Place offscreen
[myView setFrame:CGRectMake(-width, 0, width, height)];
[self.view addSubview:myView];
aTableView = [UITableView new];
//Initially set frame to superview
aTableView.frame = myView.frame;
[myView addSubview:aTableView];
//Move superview on screen
myRect = CGRectMake(0,0,width,height)];
myView.frame = myRect;
myView 移动但 Tableview 似乎并没有单独移动。我怎样才能移动它?
我假设你说 "myView moves but Tableview does not seem to move" 是因为你没有在屏幕上看到 Tableview?如果是这样,这似乎是由于您设置框架的方式所致。
//Create view and subview (tableView):
myView= [UIView new];
CGFloat width = self.view.frame.size.width;
CGFloat height=self.tableView.frame.size.height;
//Place offscreen
[myView setFrame:CGRectMake(-width, 0, width, height)];
[self.view addSubview:myView];
确定 - myView 现在位于屏幕左侧。假设宽度为 320,高度为 480,那么您的 myView 的框架是(例如):
`-320, 0, 320, 480`
然后
aTableView = [UITableView new];
//Initially set frame to superview
aTableView.frame = myView.frame;
[myView addSubview:aTableView];
糟糕,你设置了 aTableView.frame = myView.frame;
那意味着你的 table 的框架是:
`-320, 0, 320, 480`
但 是相对于 myView 的框架。因此,您的 table 视图位于 myView 的左侧 320-ptd
,它出现在屏幕左边缘的左侧 640-pts
。
//Move superview on screen
myRect = CGRectMake(0,0,width,height)];
myView.frame = myRect;
现在您已将 myView 的左侧移动到 0
,因此它是可见的,但是 aTableView
仍然在 myView
的左侧 320-pts
,因此它仍然处于关闭状态-屏幕。
将这一行更改为:
aTableView.frame = myView.bounds
应该处理一下。
我应该知道这一点,但不知道,也找不到任何地方的解释。
我正在 window 的坐标 space 中移动一个 UIView
,并且希望在代码中添加它的子视图(一个 tableView)也能移动。我没有添加任何明确的约束将子视图链接到它的父视图,认为它们会协同移动。然而,据我所知,当我移动 superview 时,tableview 并没有移动。
在代码中创建的子视图不受其父视图坐标更改的影响是否正常?如果是这样,您是否必须在代码中添加约束,是否应该在移动父视图的同时手动移动子视图,或者如何让子视图同时移动?这是代码:
//Create view and subview (tableView):
myView= [UIView new];
CGFloat width = self.view.frame.size.width;
CGFloat height=self.tableView.frame.size.height;
//Place offscreen
[myView setFrame:CGRectMake(-width, 0, width, height)];
[self.view addSubview:myView];
aTableView = [UITableView new];
//Initially set frame to superview
aTableView.frame = myView.frame;
[myView addSubview:aTableView];
//Move superview on screen
myRect = CGRectMake(0,0,width,height)];
myView.frame = myRect;
myView 移动但 Tableview 似乎并没有单独移动。我怎样才能移动它?
我假设你说 "myView moves but Tableview does not seem to move" 是因为你没有在屏幕上看到 Tableview?如果是这样,这似乎是由于您设置框架的方式所致。
//Create view and subview (tableView):
myView= [UIView new];
CGFloat width = self.view.frame.size.width;
CGFloat height=self.tableView.frame.size.height;
//Place offscreen
[myView setFrame:CGRectMake(-width, 0, width, height)];
[self.view addSubview:myView];
确定 - myView 现在位于屏幕左侧。假设宽度为 320,高度为 480,那么您的 myView 的框架是(例如):
`-320, 0, 320, 480`
然后
aTableView = [UITableView new];
//Initially set frame to superview
aTableView.frame = myView.frame;
[myView addSubview:aTableView];
糟糕,你设置了 aTableView.frame = myView.frame;
那意味着你的 table 的框架是:
`-320, 0, 320, 480`
但 是相对于 myView 的框架。因此,您的 table 视图位于 myView 的左侧 320-ptd
,它出现在屏幕左边缘的左侧 640-pts
。
//Move superview on screen
myRect = CGRectMake(0,0,width,height)];
myView.frame = myRect;
现在您已将 myView 的左侧移动到 0
,因此它是可见的,但是 aTableView
仍然在 myView
的左侧 320-pts
,因此它仍然处于关闭状态-屏幕。
将这一行更改为:
aTableView.frame = myView.bounds
应该处理一下。