Ich bin ein Android-Entwickler versucht meine Hand bei Xcode und es war bisher unangenehm. Was ich versuche, eine benutzerdefinierte Ansicht zu tun ist, haben die drei Unteransichten hat:Xcode schnelle Ansicht Wrap Inhalt
- UIImageView (für ein Symbol)
- UILabel (für den Titel)
- UILabel (für den Inhalt)
ich will es so, dass die Höhe des Content-Label wächst und schrumpft den Text wickeln sie es (wie Android wrap_content
) enthält. Und dann möchte ich, dass die benutzerdefinierte Ansicht auch vergrößert und verkleinert wird, um alle drei Unteransichten zu umbrechen.
Allerdings kann ich für mein Leben nicht herausfinden, wie diese automatischen Layouts/Einschränkungen funktionieren.
01) Wie würde ich die Höhe meiner UILabel vergrößern/verkleinern, um sie dem enthaltenen Text anzupassen?
02) Wie würde ich die Höhe meiner benutzerdefinierten Ansicht so anpassen, dass sie den enthaltenen Unteransichten entspricht?
override func layoutSubviews() {
super.layoutSubviews()
img_icon = UIImageView()
txt_title = UILabel()
txt_content = UILabel()
img_icon.backgroundColor = Palette.white
img_icon.image = icon
txt_title.text = title
txt_title.textAlignment = .Center
txt_title.font = UIFont(name: "Roboto-Bold", size:14)
txt_title.textColor = Palette.txt_heading1
txt_content.text = content
txt_content.textAlignment = .Center
txt_content.font = UIFont(name: "Roboto-Regular", size:12)
txt_content.textColor = Palette.txt_dark
txt_content.numberOfLines = 0
txt_content.preferredMaxLayoutWidth = self.frame.width
txt_content.lineBreakMode = NSLineBreakMode.ByWordWrapping
self.backgroundColor = Palette.white
addSubview(img_icon)
addSubview(txt_title)
addSubview(txt_content)
/*snip img_icon and txt_title constraints*/
let txt_content_x = NSLayoutConstraint(item: txt_content, attribute: .CenterX, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 1, constant: 0)
let txt_content_y = NSLayoutConstraint(item: txt_content, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: 80)
let txt_content_w = NSLayoutConstraint(item: txt_content, attribute: .Width, relatedBy: .Equal, toItem: self, attribute: .Width, multiplier: 1, constant: 0)
let txt_content_h = NSLayoutConstraint(item: txt_content, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40)
txt_content.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activateConstraints([
txt_content_x,
txt_content_y,
txt_content_w,
txt_content_h
])
}
Ich verstehe, dass in dem obigen Code, den ich versucht habe, ich habe die auf eine konstante 40
eingestellt Höhe. Das liegt nur daran, dass ich nicht weiß, wie ich erreichen kann, was ich will.
[EDIT]
Ich habe versucht, zu einem größeren Höhenbeschränkung Einstellung als oder gleich, aber es Xcode gerade abstürzt.
[EDIT]
Es stürzt Xcode, wenn ich versuche, es zu betrachten, sondern arbeitet völlig in Ordnung im Simulator. Frage ist jetzt, warum?
Meine Höhe Einschränkung ist jetzt:
let txt_content_h = NSLayoutConstraint(item: txt_content, attribute: .Height, relatedBy: .GreaterThanOrEqual, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40)
Es funktioniert im Simulator und hat das gewünschte Verhalten. Wenn ich jedoch das Storyboard öffne, das die Ansicht enthält, stürzt es ab. Es ist definitiv diese Codezeile, weil das Zurücksetzen auf .Equal
den Absturz behebt.
[EDIT]
Meine temporäre Lösung ist:
#if TARGET_INTERFACE_BUILDER
//use .Equal for height constraint
#else
//use .GreaterThanOrEqual for height constraint
#endif
Auf diese Weise ist es nicht Xcode abstürzen und macht immer noch so, wie ich es auf dem Simulator wollen.
[EDIT]
entfernte ich den Scheck Pre-Prozessor, weil ich keine wirkliche Sache gibt es realisiert so definiert und es noch jetzt Werke. Ich schwöre, ich habe nichts anderes geändert.
Ich bin diese kurz vor dem Aufgeben auf iOS-Entwicklung, weil der Schnittstellenerzeuger Xcode ohne Grund abstürzt, wenn alles im Simulator funktioniert. Dann mache ich einige Unsinn-Bearbeitungen und es funktioniert wieder gut.
Danke für den Rat, Mann erinnern. Ich dachte, der einzige Weg wäre, die bevorzugte Breite programmatisch auf die Superview-Breite zu setzen. Daran habe ich nicht gedacht. Mein einziges Problem ist jetzt, dass der Interface Builder und Xcode immer wieder willkürlich beschließen, mit der Arbeit aufzuhören, bis ich etwas Code umgebe, der nichts beeinflusst. Es passiert alle paar Minuten und ich kann Xcode immer wieder neu starten und es hilft erst, wenn ich beschließe, Code umzuschalten, wie zum Beispiel die Höhe von "45" auf "125" oder irgendwas anderes zu ändern. Oder, wie in meinen Änderungen zu sehen ist, Hinzufügen eines Schecks zu einem Wert, der nicht existiert und dann entfernen. –
Versuchen Sie Folgendes: http://stackoverflow.com/questions/18933321/deleting-contents-from-xcode-derived-data-folder – ullstrm