以编程方式创建UIImageView

时间:2013-12-11 14:26:51

标签: ios objective-c ios7 uiimageview autolayout

我正在尝试将图像添加到我的视图中。我尝试了以下代码:

  UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tag40pixelsborder.png"]];
    imgView.frame = CGRectMake(200, 200, 30, 30);
//    imgView.bounds = CGRectMake(300, 300, 32, 32);
    [imgView setContentMode:UIViewContentModeScaleAspectFit];
    [self.view addSubview:imgView];


    NSLog(@"frame x %f", imgView.frame.origin.x);
    NSLog(@"frame y %f", imgView.frame.origin.y);

但是图片没有出现在屏幕上,NSLog为“x”返回30.00,为“y”返回0.00如果我取消注释边界线并删除框架线,我得到80.00为“x”和80.00为“Y”。

我正在使用autolayout,但完全相同的代码适用于另一个视图!怎么了?

2 个答案:

答案 0 :(得分:1)

如果您正在使用autolayout,则表示您应该避免在代码中添加子视图!如果要执行此操作,还应以编程方式添加constrains。你的代码很好,但autolayout正在搞乱它。如果您需要脏解决方案,则应在加载所有内容后添加此ImageView(例如,在viewDidAppear:方法中)。

答案 1 :(得分:1)

如果您希望使用自动布局来执行此操作,那么您应该沿着这些方向执行某些操作。

UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tag40pixelsborder.png"]];
imgView.translatesAutoresizingMaskIntoConstraints = NO;
[imgView setContentMode:UIViewContentModeScaleAspectFit];
[imgView sizeToFit];
[self.view addSubview:imgView];

然后你会想要设置我看到的自动布局约束是x = 200 y = 200

NSArray *constraints = [NSLayoutConstraint 
                        constraintsWithVisualFormat:@"V:|-(200)-[imgView]"
                        options:0
                        metrics:nil
                        views:@{ @"imgView" : imgView }];
[self.view addConstraints:constraints];

constraints = [NSLayoutConstraint 
               constraintsWithVisualFormat:@"|-(200)-[imgView]"
               options:0
               metrics:nil
               views:@{ @"imgView" : imgView }]; 
[self.view addConstraints:constraints];  

以上将使图像视图200从顶部开始,200从父视图的左侧开始,即在这种情况下为self.view。

如果你想要添加高度,你可以删除[imgView sizeToFit],只需在高度和高度约束上添加高度,即| - (200) - [imgView(width)]和标记的高度相同用V :.