UIImageView(以编程方式创建)未显示
Posted
技术标签:
【中文标题】UIImageView(以编程方式创建)未显示【英文标题】:UIImageView (created programmatically) is not showing up 【发布时间】:2013-12-07 21:18:28 【问题描述】:我正在尝试以编程方式将 UIImageView 添加到我的模态视图控制器中,但图像根本不显示。我只看到白色背景。其余的工作正常,因为我能够加载或关闭视图。我的代码如下:
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor whiteColor];
UIImageView *imageView = [[[UIImageView alloc] init] initWithFrame:CGRectMake(100, 200, 100, 100)];
imageView.image = [UIImage imageNamed:@"IMG_0352.PNG"];
[self.view addSubview:imageView];
UISwipeGestureRecognizer *swipeleft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
swipeleft.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeleft];
UISwipeGestureRecognizer *swiperight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
swiperight.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:swiperight];
UIBarButtonItem *dismiss_btn = [[UIBarButtonItem alloc] initWithTitle:@"Start App" style:UIBarButtonItemStylePlain target:self action:@selector(dismissModal:)];
self.navigationItem.rightBarButtonItems = [NSMutableArray arrayWithObjects:dismiss_btn, nil];
【问题讨论】:
这应该可以...尝试为imageView添加一个backgroundColor,以检查问题是否在正在显示的图像中或在imageView的位置 全部大写的图片名是否正确? 除了@HaniIbrahim 建议的背景颜色,我还推荐一些NSLog
输出,检查imageView.image
是否为空。
谢谢大家。下面的 staticVoidMan 评论实际上解决了它。 Thare 是一个错字,因为我同时使用了“init”和“initWithFrame”:-)
【参考方案1】:
一个严重的问题是这一行:
UIImageView *imageView = [[[UIImageView alloc] init] initWithFrame:CGRectMake(100, 200, 100, 100)];
必须是:
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 200, 100, 100)];
你有一个额外的电话给init
。
还要确保文件名确实命名为IMG_0352.PNG
。案件很重要。确保它不是真正的 IMG_0352.png
或类似的东西。
当然,请确保您确实将这样的图像打包到您的应用程序中。确保它在您的目标的“构建阶段”的“复制捆绑资源”部分下列出。
【讨论】:
【参考方案2】:你需要放弃
UIImageView *imageView = [[[UIImageView alloc] init] initWithFrame:CGRectMake(100, 200, 100, 100)];
因为...好吧...init] initWithFrame:
看起来像一个错字下面是初始化UIImageView
的更好方法:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"IMG_0352.PNG"]];
参考:UIImageView only displays when I call initWithImage
【讨论】:
如果图像视图需要与图像不同的大小,这并不好。 并且还需要设置框架。或者视图应该如何知道放置它的位置? @visualication :为此我们有setFrame
。至少我总是只是简单地初始化并稍后setFrame
@rmaddy :答案是针对具体情况的。他的代码并没有表明他稍后也会重置图像,他的手势是在 self.view 而不是imageView
@staticVoidMan 我的意思是图像的尺寸不是 100x100。此外,无论如何都需要设置框架。使用initWithFrame:
然后调用setImage:
没有任何问题。【参考方案3】:
imageView
正在初始化两次。尝试删除一个init
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 200, 100, 100)];
在将图像添加到图像文件夹时,检查图像/文件夹是否在 Xcode 中作为“创建组”选项添加,而不是使用“创建文件夹引用”。 文件夹引用只会提供链接或引用,因此您实际上无法访问文件夹中的元素。
【讨论】:
以上是关于UIImageView(以编程方式创建)未显示的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将 UIImageView 缩放到固定宽度和灵活高度?
如何以编程方式更改使用自动布局在情节提要上创建的 UIImageView 的大小?