ios - 如果通过 Interface Builder 添加,则无法修改 UIImageView 的框架

标签 ios uiimageview interface-builder

我遇到了一个非常特殊的问题,我无法修改 UIImageView 的框架。

我已将它隔离到这个非常简单的示例中。从默认的单 View 应用程序 xcode 模板开始,我在 Interface Builder 中添加了一个 UIImageView,将其链接到名为 testImage 的 ViewController 属性,并在 ViewController.m 中添加:

-(void)viewDidAppear:(BOOL)animated{
    UIImageView* maskImage = [[UIImageView alloc] initWithFrame:self.testImage.frame];
    maskImage.image = self.testImage.image;
    maskImage.alpha = 0;
    [self.view addSubview:maskImage];
    self.testImage.frame = CGRectMake(10, 10, 10, 10);
}

它不起作用。测试图像坚决保留在原处。如果我不添加 maskImage 来查看,该示例有效。而且,是的,我确定我没有用 maskImage 覆盖目的地。

如果我不使用 IB 来放置图像,而是使用:

self.testImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 100, 300, 300)];
self.testImage.image = [UIImage imageNamed:@"jim-105.png"];
[self.view addSubview:self.testImage];

在 viewDidLoad 中,一切都按预期工作。

我也尝试过只将图像放在 IB 中,然后在 viewDidLoad 中设置其属性,但效果相同。我一直在 Xcode5 中尝试这个。我在这里无法访问以前的 Xcode,我不确定这是预期的行为(如果是的话,为什么)或者这是一个错误?

最佳答案

如果您使用自动布局,我会准确地期待您所描述的行为,在这种情况下,当重新应用约束时可以阻止调整 frame 的尝试(这可能发生在最偶然的事件中,例如向主视图添加另一个 View )和 frame 将被重新计算。如果您有一个带有约束的自动布局 View ,要更改其大小,您需要更改其约束。

如果您想知道为什么以编程方式创建的 testImage 会按预期工作,那是因为默认情况下,以编程方式创建的 View 打开了 translatesAutoresizingMaskIntoConstraints。因此,更改 frame 的尝试仍然存在。

如果您正在使用自动布局并想要更改框架,您可以通过在Interface Builder 中为约束添加IBOutlet 引用来完成此操作。假设您的 View 有顶部、前导、宽度和高度约束。然后您可以更改它的框架(在本例中,更改为 CGRect(0, 100, 300, 200)):

self.imageViewLeadingConstraint.constant = 0;
self.imageViewTopConstraint.constant = 300.0;
self.imageViewWidthConstraint.constant = 300;
self.imageViewHeightConstraint.constant = 200;

显然,您需要这四个 IBOutlet 引用,但是一旦您这样做了,就很容易了。

关于ios - 如果通过 Interface Builder 添加,则无法修改 UIImageView 的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19066880/

相关文章:

ios - 改变 TableView 或 TableViewCell 的宽度

ios - xcode 5.1 不断修改我的 Storyboard

ios - 尝试以编程方式更改 Storyboard时出错

ios - 是否可以使用游戏中心实现评级系统?

ios - 为什么 UIImageView 只旋转一次?

objective-c - iOS UIImageView 流畅的图像呈现

ios - 如何让图片占据应用底部?

ios - 无法在另一个类的自定义类上设置 UIImageView.image

ios - 如何在ios中异步下载图片?

ios - 如何在 UIImageView Swift 中使用 WebP 图片