Ich schreibe hier nicht gern von meiner Arbeit. Mich versteht ja doch keiner. Aber manchmal ist es einfach zu schrill. Heute zum Beispiel fand ich einen wunderbaren Fehler leider erst nach über zwei Stunden. iPad Anwendung. Folgende Situation:
Ich habe ein UIView, das mit einer bestimmten Größe initialisiert wird. In dieses View werden im Nachhinein dynamisch Subviews und Controls hinzugefügt. Das View ist in einem SplitviewController eingebettet.
Damit das Ganze schön skaliert habe ich außerdem folgendes gemacht:
searchView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; searchView.autoresizesSubviews = YES;
und danach die Subviews hinzugefügt. Wenn man die Anwendung startet sieht optisch alles gut aus, die Controls sind am richtigen Fleck. Aber das Event-Handling funktionierte nicht mehr. Ich habe wirklich alles ausprobiert, bis ich testweise einen Button hinzugefügt habe. Dabei fiel mir auf, dass die Events doch ausgelöst wurden .. allerdings nur in einem sehr schmalen Streifen am oberen Ende des Button. Gottseidank habe ich überall rumgeklickt ;-) Danach habe ich das Flag UIViewAutoresizingFlexibleHeight weggelassen und siehe da, alles funktioniert wie erwartet. Wie es scheint, wird der View tatsächlich flexibel skaliert, seine Kind-Elemente jedoch nicht. Skaliert wird nur der Bereich in dem Events ausgewertet werden. Wir haben also zwei Views, eins mit den tatsächlichen Controls und eins mit den Grenzen des Event-Handlings. Die andere Erklärung ist die, dass Kind-Elemente einfach aus ihrem Parent herausragen können. Was auch immer passiert war, es war nicht auf Anhieb zu erkennen. Eher so auf Siebt- oder Achthieb.
Was lernen wir daraus?
- Öfter einchecken um funktionsfähige von kaputten Sourcecodeteilen besser unterscheiden zu können
- sich von der Annahme verabschieden, alles müßte so funktionieren wie man es sich gedacht hat
- manuelles Resizing muss in allen Ebenen der Viewhierarchie implementiert werden damit es zuverlässig funktioniert
- es ist verblüffend wieviel Zeit man in API-Spezialskills investieren muss, die man hinterher auf keiner anderen Plattform mehr gebrauchen kann