我有一个视图,其子视图'我需要动态更改框架以响应用户操作。加载视图时,我会初始化其子视图,如下所示:
if (self.firstSubview == nil) {
NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"FirstSubView" owner:self options:nil];
for (UIView *view in views) {
self.firstSubview = view;
}
}
然后:
[self.view addSubview:self.firstSubview];
初始化后,当我想修改子视图的帧时,我会这样做:
self.firstSubview.frame = CGRectMake(0, 80, self.firstSubview.frame.size.width, 200);
我想要做的是在用户点击按钮时调整子视图的Y坐标及其高度,并在用户再次点击按钮时返回子视图的原始帧。但是,我发现有时这不起作用,Y坐标和高度似乎总是不像我在CGRectMake
函数中所说的那样设置。看起来函数并不总是采用绝对值,而是取决于最后一帧的值...我的意思是,看起来并不总是帧在此函数调用之后采用Y = 80坐标。
也许我误解了它是如何工作的:在视图'nib
文件中,我在其Simulated Metrics
中设置了顶部和底部条形图,因此视图的高度应该是这些条形图之间的剩余空间并且(0,0)坐标应该是顶部栏下方的左上角,对吧?有什么我想念的吗?每当我想要更改其框架时,我是否应该重新初始化并再次添加子视图?或者我还应该做些什么来应用帧的变化?
提前致谢
答案 0 :(得分:0)
您发布的for-in循环将按顺序将数组视图中的每个元素设置为self.firstSubview属性,以便在循环self.firstSubview之后将 last 一个。如果这真的是你想要的,那么这里有一个更简单的方法:
if (views.count > 0)
self.firstSubview = views.lastObject;
或者也许:
for (id element in views)
{
if ([element isKindOfClass:[UIView class]])
{
self.firstSubview = element;
break;
}
}