1

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

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

我遇到的问题是我添加到 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 个,视图就不会移动。

谁能告诉我需要进行什么设置以使视图保持在与其父视图相关的相同位置?

4

1 回答 1

2

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

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

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

代替:

[calendarLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin];
于 2013-08-05T13:57:07.537 回答