1

DetailViewストーリーボードにオブジェクトを動的に配置する方法を理解するのに苦労しています。

手始めに、アプリは従来のブログ形式に従います。この形式では、MasterViewは複数の投稿を持つUITableView(またはUICollectionView)です。

ユーザーがそれらの1つをタップすると、セグエがDetailViewにつながります。

DetailViewでの要素の配置を除いて、すべてが正しくロードされます。

これはそれがどのように見えるかです:

ここに画像の説明を入力してください

上部UIImageViewは高さが固定されているため、と重ならないようになっていPost Text Labelます。

ただし、Post Text Label一部の投稿テキストは他のテキストよりも長いため、高さは可変です。これは、動的にサイズを変更する(resizeToFit)を使用しているカテゴリによって処理されます。これはすべてうまくいきます。

問題は、垂直方向に大きくなるにつれて、(緑色の長方形)が垂直方向のサイズに基づいて下に移動するPost Text Label必要があることです。そして、私はそれを下に動かすことができません。View - BylinePost 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;
4

2 に答える 2

2

iOS6をターゲットにしている場合は、自動レイアウトの制約を確認する必要があります。そうでない場合は、postTextLabelを再配置するためにすでに行ったのと同じアプローチを使用できません。したがって、postByLineの場合は、posttextLabelの下部を基準にして配置します。

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

AutoLayoutを理解するには、@edwinが推奨する投稿を読むことが重要だと思います。

たとえば、ストーリーボードでAutoLayoutをオンにしましたが、要素が期待どおりに位置を調整していませんでした。

問題(上記のリンク先の投稿で対処)は、AutoLayoutが最初に要素を特定の距離のしきい値内で隣り合わせに配置することを想定していることです。そうしないと、要素間の関係が作成(および維持)されません。

上記の私の元の投稿を見ると、緑色の長方形(投稿の署名)が表示されます。投稿テキストの縦のサイズが大きくなったため、下に移動していませんでした。

これは、最初に署名ボックスを作成したときに、投稿テキストラベルの下部の境界から離れすぎたためです。ドラッグすると、2つの要素の間にH字型のアイコンが表示され、関係が作成されたことを示します。

その後、すべてが期待どおりに機能しました。ほとんどのデフォルトの距離しきい値は約8ポイントですが、関係を確立すると、後で適切と思われる距離を増やすことができます。

于 2012-10-15T22:53:15.387 に答える