视图框架变化对子视图的影响

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

应该处理一下。