使用.xib文件和AutoLayout自定义UIView调整UIImageViews的大小

时间:2015-03-25 03:12:10

标签: ios objective-c uiview autolayout

情况就是这样:我有一个VC里面有一个自定义UIView。此自定义UIView有一个.xib文件,其中包含2个UIImageViews。我试图通过使用AutoLayout让这两个UIImageViews在不同的屏幕尺寸上缩放到相同的大小。但是,当我启动我的应用程序时,我的自定义UIView中的图像超出了自定义UIView的超级视图(这是VC)容器大小的范围。请帮忙。这里有一些图片可以更详细地解释这个问题。

自定义UIView中的代码: @implementation CustomTwoImagesSelectedUIView

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
        if (self) {
            [self load];
        }
    return self;
}

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
        if (self) {
            [self load];
        }
    return self;
}

- (void)load {
    [[NSBundle mainBundle] loadNibNamed:@"CustomTwoImagesSelectedUIView" owner:self options:nil];
    self.lastImageView.layer.cornerRadius = 5.0f;
    self.lastImageView.clipsToBounds = YES;
    self.secondToLastImageView.layer.cornerRadius = 5.0f;
    self.secondToLastImageView.clipsToBounds = YES;   
    [self addSubview:self.twoImagesSelectedView];
}

2 个答案:

答案 0 :(得分:0)

您已设置了图像视图的cliptobounds属性,但我认为图像视图本身的界限设置不正确。您需要在.xib文件中仔细设置图像视图的布局约束。也。将customImageViews添加到某个视图控制器或superview时。您还需要针对其superview设置customImageViews的布局约束。

答案 1 :(得分:0)

我在自定义UIView中尝试了AutoLayout,但它也无法正常工作。我认为这是Xcode的一个错误,我终于找到了这篇文章:Create an IBDesignable UIView subclass with code from an XIB file in Xcode 6

在文章中,我发现它使用autoresizingMask而不是AutoLayout。这是修复UI显示问题的好方法。我希望它可以帮助你。

- (void)load {
    [[NSBundle mainBundle] loadNibNamed:@"CustomTwoImagesSelectedUIView" owner:self options:nil];
    self.lastImageView.layer.cornerRadius = 5.0f;
    self.lastImageView.clipsToBounds = YES;
    self.secondToLastImageView.layer.cornerRadius = 5.0f;
    self.secondToLastImageView.clipsToBounds = YES;   
    [self addSubview:self.twoImagesSelectedView];

    self.twoImagesSelectedView.frame = self.bounds;
    self.twoImagesSelectedView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}