如何使 AutoLayout 适应不断变化的图像尺寸

Posted

技术标签:

【中文标题】如何使 AutoLayout 适应不断变化的图像尺寸【英文标题】:How to make AutoLayout adjust to changing image sizes 【发布时间】:2015-09-07 00:44:26 【问题描述】:

我有一个带有图像视图和两个 UILabel 的 nib 文件,一个在图像上方,一个在图像下方。 nib 用于屏幕上的每个页面,而我的视图控制器使用嵌套的 switch 语句来确定用于每个屏幕的图像和文本。我遇到的问题是图像大小不一,有时图像下方的标签不会出现。我希望它始终出现在图像下方 4px 处,因此我设置了一个常量为 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;

【问题讨论】:

首先,使用 View Debugging 找出标签的真正位置! 看看这个:***.com/questions/26833627/… 【参考方案1】:

将底部空间的大小减小到superview约束并在设置图像后在self.view上调用updateConstraintsIfNeeded解决了问题,除了在UILabel中有很多文本的少数页面。我还必须缩小这些页面上图像的大小才能显示标签。

【讨论】:

以上是关于如何使 AutoLayout 适应不断变化的图像尺寸的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Autolayout 缩放 Xcode 6 上的按钮以适应不同的屏幕尺寸?

IOS / Storyboard / Autolayout:使Textview垂直扩展以适应文本

如何使元素适合 Xcode IB 中的 AutoLayout?

使用 AutoLayout 缩放 UIImageView 以适应宽度

如何使图像适应手机屏幕

AutoLayout约束以适应矩形内的视图,保持一定的纵横比(以编程方式)