Dynamische Positionierung von iOS-Objekte in einem Storyboard
Ich habe eine harte Zeit, herauszufinden, wie dynamisch positionieren der Objekte in einer Detailansicht storyboard.
Für den Anfang, die app folgt einem traditionellen blog-format, in dem der MasterView ist ein UITableView (oder UICollectionView) mit mehreren posts.
Wenn der Benutzer tippt auf einer von Ihnen, ein übergang führt zur Detailansicht.
Alles lädt richtig, außer für die Positionierung der Elemente in der Detailansicht.
Dies ist, wie es aussieht:
Oben UIImageView
hat eine Feste Höhe, so dass es keine überschneidungen mit der Post Text Label
.
Jedoch Post Text Label
variable Höhe, wie einige post-Texte sind länger als andere. Diese wird betreut von einer Kategorie, die ich verwende, die sich dynamisch ändert, es (resizeToFit
). Dies funktioniert alles Super.
Das problem jetzt ist, dass die Post Text Label
wächst vertikal, brauche ich die View - Byline
(grünes Rechteck) sich nach unten zu bewegen, basierend auf Post Text Label
's vertikale Größe. Und ich kann einfach nicht nach unten bewegen.
Können Sie sehen, dass ich platziert alle View - Byline
von Objekten in einer Ansicht, so dass Sie zusammen verschoben werden, indem Sie auf nur die View - Byline
programmatisch position zu verändern.
Kennen Sie eine Methode, die ich verwenden können, um dies zu erreichen? Alle Hinweise, tutorials oder Weisheit sind wir sehr dankbar.
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;
- Sind Sie mit iOS 6+ mit AutoLayout-oder iOS 4.3+ mit AutoResizing Masken? Ich Frage, weil iOS 6+ mit AutoLayout wird tun, was Sie benötigen, sehr einfach.
- Ich bin mit ios6 - ich habe halten Sie die "use autolayout" - box überprüft, aber habe nicht bemerkt einen Unterschied machen in mein problem - wie soll ich diesen Ansatz?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie auf ios6, sollten Sie sich autolayout-constraints. Wenn nicht, können Sie nicht verwenden, die gleiche Vorgehensweise, die Sie bereits haben um Sie neu zu positionieren postTextLabel. Also für postByLine, position relativ zu der Unterseite der post textLabel.
postTextLabel
aber nicht für das andere element (postByline
)clip subviews
deaktiviert werden?Ich denke, das Lesen der post empfohlen von @edwin ist wichtig zu verstehen, AutoLayout.
Zum Beispiel, obwohl ich hatte AutoLayout in meinem storyboard, die Elemente waren nicht die Anpassung Ihrer position als erwartet.
Dem Thema (angesprochen in dem post weiter oben verlinkt) ist, dass AutoLayout erwartet, dass Sie zunächst die position Ihrer Elemente nebeneinander innerhalb einer bestimmten Entfernung-Schwelle, sonst wird es nicht schaffen (und halten) eine Beziehung zwischen Ihnen.
Wenn Sie Blick auf meinen ursprünglichen post oben, du wirst sehen, das grüne Rechteck (post-byline). Es war nicht nach unten bewegen, als den post-text erhöht die vertikale Größe.
Dass war da als ich anfangs erstellt die Quellenangabe box, ich legte es zu weit von der unteren Grenze des post-text-label. Einmal zog ich ihn näher, ein h-förmiges Symbol erschien zwischen den 2 Elementen angibt, dass eine Beziehung erstellt wurde.
Dann funktionierte alles wie erwartet. Die meisten Standard-Abstand Schwellenwerte sind um 8 Punkte, aber auf einmal stellen Sie die Beziehung, man kann sich später erhöhen Sie den Abstand wie Sie sehen, passen.