目标C /自动调整子视图不起作用

时间:2013-08-05 13:07:39

标签: iphone ios objective-c autoresizingmask

所以,我正在尝试从图像制作日历。

图像的分辨率高于屏幕,所以我考虑将图像加载到更大的视图,添加所有内容(作为子视图),调整视图大小以适合屏幕显示用户,然后如果他决定保存图像,再次将其调整为更大的尺寸并保存。 (它主要按我的意图工作)。

我遇到的问题是我添加到ImageView的子视图不会调整大小。

将图像加载到我的ImageView并启用AutoresizesSubviews:

[self.backgroundImageView setImage:backgroundImage_];
[self.backgroundView setAutoresizesSubviews:YES];

在其上添加UILabel:

UILabel *calendarLabel = [[UILabel alloc] initWithFrame:CGRectMake(screenWidth_ * 0.1, 0, screenWidth_ * 0.8, screenHeight_ * 0.15)];
[calendarLabel setText:@"Calendar"];
[calendarLabel setTextColor:[UIColor whiteColor]];
[calendarLabel setTextAlignment:NSTextAlignmentCenter];
[calendarLabel setBackgroundColor:[UIColor clearColor]];
[self.backgroundImageView addSubview:calendarLabel];

保存大小应调整为:

savedRect_ = self.backgroundView.frame;

调整imageview的大小(实际调整imageview的父级,因为imageView占据了整个视图):

[self.backgroundView setFrame:savedRect_];

现在我不知道为什么这不符合我的预期。

PS:做了一些测试,结果发现它与编程添加的视图稍有不同,然后添加了IB。我觉得它与AutoresizingMask有关。

进行了一些研究,我想我必须使一切变得灵活(它可以在顶部,底部,右侧和左侧增加宽度,高度,尺寸),但它仍然不起作用。如果我启用所有6,则视图不会移动。

有人可以告诉我我需要制作什么样的设置,以便视图与父视图保持相同的位置吗?

1 个答案:

答案 0 :(得分:2)

好的,事实证明这是一个简单的解决方案,正如我所料......

我尝试分别应用每个面膜:

[calendarLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin];
[calendarLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
....

而不是:

[calendarLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin];