2010-12-08 24 views
4

Gibt es eine Möglichkeit, Autoresizing-Masken zu verwenden, um meine Inhalte zu verschieben, so dass die Schaltfläche zum Löschen nicht verdeckt? Googeln hat mir gesagt, dass ich eine Autoresizing-Maske von UIViewAutoresizingFlexibleRightMargin auf meiner Subview einstellen muss. Es scheint mir wie UIViewAutoresizingFlexibleWidth würde eigentlich mehr Sinn machen; obwohl ich beide ausprobiert habe und auch nicht funktioniert.Resize UITableViewCell Inhalt, wenn die Schaltfläche zum Löschen zeigt

Die Ansicht, die ich versuche zu verkleinern, ist nur eine Beschriftung, die eine Unteransicht der Zelle contentView ist. Ich bin mir nicht sicher, ob sich die Inhaltsansicht selbst automatisch ändert, wenn die Schaltfläche "Löschen" angezeigt wird. aber es scheint, als wäre es nicht; Sonst hätte meine Autoresizing-Maske funktioniert.

Wenn das Vorhandensein der Schaltfläche zum Löschen keine Größenänderung der Ansichten bewirkt; Gibt es das überhaupt, dass ich das manuell machen kann?

Antwort

4

Sie sollten UIViewAutoresizingFlexibleLeftMargin verwenden.

Hier ist warum. Sie möchten, dass sich Ihre Inhalte nach links bewegen, sodass es so aussieht, als ob die Löschschaltfläche den Inhalt nach links verschiebt. FlexibleLeftMargin bedeutet grundsätzlich, dass Ihr UILabel auf der rechten Seite Ihres ContentViews fixiert bleibt. Der Grund dafür liegt darin, dass die Schaltfläche "Löschen" dazu führt, dass Ihre Inhaltsansicht die Breite verkleinert.

Die Autoresizing-Maske Ihres UILabel bezieht sich darauf, wie es sich in der contentView verhält, nicht in der Zelle.

Probieren Sie es aus, es sollte funktionieren.

+0

UIViewAutoresizingFlexibleLeftMargin funktioniert nicht für mich, aber UIViewAutoresizingFlexibleWidth funktioniert. – derpoliuk

3

Diese Frage ist wirklich alt, aber ich fühle, dass ich das sowieso beantworten sollte, da ich gerade die Lösung selbst gefunden habe.

Nur die Inhaltsansicht der Zelle wird mit der Bestätigungsschaltfläche skaliert angezeigt. Wenn Sie Ihre Ansichten (Beschriftungen, Bildansichten usw.) nicht zur Zelle contentView hinzufügen, anstatt sie direkt zur Zelle hinzuzufügen, wird die Größe nicht geändert, wenn die Größe der Inhaltsansicht geändert wird. In meinem Fall habe ich es direkt in die Zelle eingefügt.

Anstatt also wie etwas zu tun:

UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, width-10, 20)]; 
[nameLabel setFont:[UIFont boldSystemFontOfSize:16]]; 
[nameLabel setHighlightedTextColor:[UIColor whiteColor]]; 
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
[nameLabel setTag:101]; 
[cell addSubview:nameLabel]; 
[nameLabel release]; 

Sie tun sollten:

UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, width-10, 20)]; 
[nameLabel setFont:[UIFont boldSystemFontOfSize:16]]; 
[nameLabel setHighlightedTextColor:[UIColor whiteColor]]; 
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
[nameLabel setTag:101]; 
[[cell contentView] addSubview:nameLabel]; // <<--- note the change in this line! 
[nameLabel release]; 

hoffe, das hilft anderen, die auf dieses Problem stoßen.

1

Ich benutze iOS 7, ich habe das gleiche Problem. Ich benutze eine separate Xib für die UITableViewCell mit Auto-Layout aktiviert, so nur eine Einschränkung auf das Label hinzugefügt, so dass es eine feste Lücke auf der rechten Seite haben wird.

Verwandte Themen