在Storyboard中动态定位iOS对象

时间:2012-10-14 21:15:19

标签: objective-c ios ios5 interface-builder storyboard

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

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

当用户点击其中一个时,segue会指向DetailView。

除了在DetailView中定位元素外,所有内容都正确加载。

它的外观如下:

enter image description here

顶部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

DetailViewController.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;

2 个答案:

答案 0 :(得分:2)

如果您定位ios6,则应检查自动布局限制。如果没有,您不能使用与重新定位postTextLabel相同的方法。因此对于postByLine,将其相对于post textBabel的底部进行定位。

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

答案 1 :(得分:0)

我认为阅读post recommended by @edwin对了解AutoLayout很重要。

例如,虽然我的故事板中有AutoLayout ON,但元素并没有按预期调整其位置。

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

如果您查看我上面的原始帖子,您会看到绿色矩形(帖子后缀)。随着帖子文字的垂直尺寸增加,它没有向下移动。

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

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