如何使 AutoLayout 适应不断变化的图像尺寸
How to make AutoLayout adjust to changing image sizes
我有一个带有图像视图和两个 UILabel 的 nib 文件,一个在图像上方,一个在图像下方。 nib 用于屏幕上的每个页面,我的视图控制器使用嵌套的 switch 语句来确定用于每个屏幕的图像和文本。我遇到的问题是图像大小不一,有时图像下方的标签不会出现。我希望它总是出现在图像下方 4px 处,所以我设置了一个垂直 space 约束,常数为 4,但是使用日志语句打印 imageview 框架和标签框架的起源和大小告诉我它是被放置在下方超过 4px 的位置,并且可能位于屏幕底部之外。我附上了一些屏幕截图来说明问题。第一个屏幕截图显示所有内容都出现在正确的位置。是否需要在代码中添加一些内容,使标签始终正确显示,而不管图像高度如何?
这是带有约束的 nib 文件的屏幕截图:
这里是设置内容的视图控制器的代码示例:
@implementation ContentViewController
- (id)initForContentSet:(int)setNumber andIndex:(int)indexNumber {
if (self = [super initWithNibName:@"ContentView" bundle:nil]) {
self.contentSet = setNumber;
self.indexNum = indexNumber;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
[_contentImageView setContentMode:UIViewContentModeScaleAspectFit];
[_contentText setLineBreakMode:NSLineBreakByWordWrapping];
//set up content
switch (_contentSet) {
case 1:
switch (_indexNum) {
case 0:
//first exposure page
[_pageHeader setText:@"The Exposure Triangle"];
[_contentImageView setImage:[UIImage imageNamed:@"exposure-triangle.jpg"]];
[_contentText setText:@"Balance the amount of available light with aperture, ISO, and shutter speed settings."];
break;
case 1:
//second exposure page
[_pageHeader setText:@"Example"];
[_contentImageView setImage:[UIImage imageNamed:@"exposureexample.jpg"]];
[_contentImageView sizeToFit];
[_contentText setText:@"An underexposed photo is too dark, while an overexposed one looks washed out."];
break;
default:
break;
}
break;
将底部 space 的大小减小到 superview 约束并在设置图像后在 self.view 上调用 updateConstraintsIfNeeded 解决了问题,除了少数UILabel 中包含大量文本的页面。我还必须缩小这些页面上图像的大小才能显示标签。
我有一个带有图像视图和两个 UILabel 的 nib 文件,一个在图像上方,一个在图像下方。 nib 用于屏幕上的每个页面,我的视图控制器使用嵌套的 switch 语句来确定用于每个屏幕的图像和文本。我遇到的问题是图像大小不一,有时图像下方的标签不会出现。我希望它总是出现在图像下方 4px 处,所以我设置了一个垂直 space 约束,常数为 4,但是使用日志语句打印 imageview 框架和标签框架的起源和大小告诉我它是被放置在下方超过 4px 的位置,并且可能位于屏幕底部之外。我附上了一些屏幕截图来说明问题。第一个屏幕截图显示所有内容都出现在正确的位置。是否需要在代码中添加一些内容,使标签始终正确显示,而不管图像高度如何?
这是带有约束的 nib 文件的屏幕截图:
这里是设置内容的视图控制器的代码示例:
@implementation ContentViewController
- (id)initForContentSet:(int)setNumber andIndex:(int)indexNumber {
if (self = [super initWithNibName:@"ContentView" bundle:nil]) {
self.contentSet = setNumber;
self.indexNum = indexNumber;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
[_contentImageView setContentMode:UIViewContentModeScaleAspectFit];
[_contentText setLineBreakMode:NSLineBreakByWordWrapping];
//set up content
switch (_contentSet) {
case 1:
switch (_indexNum) {
case 0:
//first exposure page
[_pageHeader setText:@"The Exposure Triangle"];
[_contentImageView setImage:[UIImage imageNamed:@"exposure-triangle.jpg"]];
[_contentText setText:@"Balance the amount of available light with aperture, ISO, and shutter speed settings."];
break;
case 1:
//second exposure page
[_pageHeader setText:@"Example"];
[_contentImageView setImage:[UIImage imageNamed:@"exposureexample.jpg"]];
[_contentImageView sizeToFit];
[_contentText setText:@"An underexposed photo is too dark, while an overexposed one looks washed out."];
break;
default:
break;
}
break;
将底部 space 的大小减小到 superview 约束并在设置图像后在 self.view 上调用 updateConstraintsIfNeeded 解决了问题,除了少数UILabel 中包含大量文本的页面。我还必须缩小这些页面上图像的大小才能显示标签。