有关如何设置故事板的建议,以便元素不重叠

时间:2012-10-01 01:00:23

标签: iphone objective-c ios ios5 uiimage

尽管阅读了诸如guide for Windows and Views之类的Apple文档,但我试图解决这个问题。

这个屏幕截图最能说明我的问题:

enter image description here

正如您所看到的,博客文章中的图片具有可变高度(但固定宽度= 320像素),这可能会或可能不会与其下方的视图元素重叠,这是一个标签。

与使用CSS的方式类似,我需要UIImageView为“display:block”,以及标签。

因此,如果图像占据或多或少的垂直空间,下面的元素将相应地调整其位置。这只是以编程方式完成的吗?

我试图通过将每个人放在他们各自的视图中来分层次地做到这一点无济于事。 “剪辑子视图”未被攻击。

非常感谢任何关于完成这项工作的一般程序的建议,或者相关材料的链接。


控制器代码(postTextLabel和postPicture连接IBOutlets)

#import "DetailViewController.h"

@interface DetailViewController ()

- (void)configureView;

@end

@implementation DetailViewController;

@synthesize scroller;

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self configureView];

        CGRect label_frame = CGRectMake(postTextLabel.frame.origin.x,
                                        postPicture.frame.origin.y + postPicture.frame.size.height,
                                        postTextLabel.frame.size.width,
                                        postTextLabel.frame.size.height);

        postTextLabel.frame = label_frame;

}

- (void)configureView
{
    if (self.detailItem) {
        NSDictionary *post           = self.detailItem;
        NSString     *postText       = [post objectForKey:@"post_text"];
        NSString     *postAuthorName = [post objectForKey:@"post_author_name"];

        postTextLabel.numberOfLines = 0;
        postTextLabel.text       = postText;
        postAuthorNameLabel.text = postAuthorName;

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSString *pictureUrl = [post objectForKey:@"post_picture"];
            NSData   *data       = [NSData dataWithContentsOfURL:[NSURL URLWithString:pictureUrl]];

            dispatch_async(dispatch_get_main_queue(), ^{
                postPicture.image = [UIImage imageWithData:data];
            });
        });
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}
@end

enter image description here

1 个答案:

答案 0 :(得分:1)

假设您的目标只是将标签捕捉到图像的底部,编程是您最好的方法 - 我认为没有办法在Interface Builder中执行此操作。如果您将图像和标签分别设置为名为imagelabel的IBOutlets,则以下代码应该为您提供您的目标:

CGRect label_frame = CGRectMake(label.frame.origin.x, image.frame.origin.y + image.frame.size.height, label.frame.size.width, label.frame.size.height);
label.frame = label_frame;

每当图像被更改并且文本应位于其下方时,请调用此标签,标签的上边缘与图像的底部对齐。请记住,如果图像/文字变大,您可能需要更改滚动视图的contentSize以匹配。