1

我很难弄清楚如何在 DetailView 故事板中动态定位对象。

对于初学者,该应用程序遵循传统的博客格式,其中 MasterView 是一个 UITableView(或 UICollectionView),其中包含多个帖子。

当用户点击其中一个时,segue 会导致 DetailView。

一切都正确加载,除了 DetailView 中元素的定位。

这是它的外观:

在此处输入图像描述

顶部UIImageView具有固定高度,因此不会与Post Text Label.

但是,Post Text Label由于某些帖子文本比其他文本更长,因此具有可变高度。这是由我正在使用的一个类别来处理的,它可以动态调整它的大小(resizeToFit)。这一切都很好。

现在的问题是,Post Text Label随着垂直增长,我需要View - Byline(绿色矩形)根据Post Text Label垂直大小向下移动。我就是不能让它向下移动。

您可以看到我将所有View - Byline对象都放在了一个视图中,因此它们通过仅针对View - Byline以编程方式更改位置来一起移动。

你知道我可以用什么方法来完成这个吗?非常感谢任何指针、教程或智慧。

DetailViewController.h

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController {
    IBOutlet UIImageView  *postThumbView;
    IBOutlet UILabel      *postTextLabel;
    IBOutlet UIImageView  *postAuthorPictureView;
    IBOutlet UILabel      *postAuthorNameLabel;
    IBOutlet UILabel      *postTimestampLabel;
    IBOutlet UIScrollView *scroller;
    IBOutlet UIView       *postBylineView;
}

@property (strong, nonatomic) id detailItem;

@end

细节视图控制器.m

...
[postThumbView setImageWithURL:[NSURL URLWithString:postThumbUrl] placeholderImage:[UIImage imageNamed:@"default"]];

[postAuthorPictureView setImageWithURL:[NSURL URLWithString:authorPicture] placeholderImage:[UIImage imageNamed:@"default"]];

postTextLabel.text  = postText;
postTextLabel.frame = CGRectMake(postTextLabel.frame.origin.x,
                                 postThumbView.frame.origin.y + postThumbView.frame.size.height,
                                 postTextLabel.frame.size.width,
                                 postTextLabel.frame.size.height);
[postTextLabel resizeToFit];

postAuthorNameLabel.text = postAuthorName;
postTimestampLabel.text  = postTimestamp;
4

2 回答 2

2

如果你的目标是 ios6,你应该检查自动布局约束。如果不是,您不能使用与重新定位 postTextLabel 相同的方法吗?因此,对于 postByLine,将其相对于 post textLabel 的底部定位。

postByLine.frame = CGRectMake(postByLine.frame.origin.x,
                                      postTextLabel.frame.origin.y + postTextLabel.frame.size.height,
                                      postByLine.frame.size.width,
                                      postByLine.frame.size.height);
于 2012-10-15T00:31:37.743 回答
0

我认为阅读@edwin 推荐的帖子对于理解 AutoLayout 很重要。

例如,虽然我在故事板中启用了 AutoLayout,但元素并没有按预期调整它们的位置。

问题(在上面链接的帖子中解决)是 AutoLayout 期望您最初将元素彼此相邻放置在一定距离阈值内,否则它不会创建(和维护)它们之间的关系。

如果您查看我上面的原始帖子,您会看到绿色矩形(署名)。随着帖子文本的垂直大小增加,它并没有向下移动。

那是因为当我最初创建署名框时,我把它放在离帖子文本标签的底部边界太远的地方。当我将它拖得更近时,两个元素之间会出现一个 h 形图标,表示已创建关系。

然后一切都按预期工作。大多数默认距离阈值约为 8 点,但一旦建立关系,您可以稍后根据需要增加距离。

于 2012-10-15T22:53:15.387 回答