I’ve got a quiz app I built and have gotten bug reports of some questions with images for answer not being layed out correctly. The problem I’m having is that in development this doesn’t occur. The bug report is on a second gen Ipod touch running 4.2.1 I managed to get a hold of one for testing.
Here are screen shots from the development and distribution versions.
http://farm8.staticflickr.com/7169/6501675055_1ea8c3d18b.jpg
http://farm8.staticflickr.com/7015/6501727253_ddc0fb616f.jpg
(apparently I’m not trusted enough to post images)
This is what i wrote to create and layout these buttons
for (int i =0; i < question.buttonTitles.count; i++) {
NSLog(@"add images for answer: %@", [question.buttonTitles objectAtIndex:i]);
UIImage * image = [UIImage imageNamed:[question.buttonTitles objectAtIndex:i]];
float x = 0.0f;
float y = 0.0f;
float width = image.size.width;;
float height = image.size.height;
NSLog(@"%@", NSStringFromCGSize(image.size));
if (question.buttonTitles.count != 4) {
x = (293.0 - width) / 2.0;
y = questionLabel.frame.origin.y + questionLabel.frame.size.height + (i * height) + (12 * (i));
}else{
switch (i) {
case 0:
x = (self.frame.size.width/2) - 7 - width;
y = (self.frame.size.height/2 + questionLabel.frame.size.height/2) - 7 - height;
break;
case 1:
x = (self.frame.size.width/2) + 7;
y = (self.frame.size.height/2 + questionLabel.frame.size.height/2) - 7 - height;
break;
case 2:
x = (self.frame.size.width/2) - 7 - width;
y = (self.frame.size.height/2 + questionLabel.frame.size.height/2) + 7;
break;
case 3:
x = (self.frame.size.width/2) + 7;
y = (self.frame.size.height/2 + questionLabel.frame.size.height/2) + 7;
break;
}
}
UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom];
imageButton.frame = CGRectMake(x, y, width, height);
[imageButton setImage:image forState:UIControlStateNormal];
[self addSubview:imageButton];
SEL functionName;
functionName = NSSelectorFromString([buttonFunctions objectAtIndex: i]);
[imageButton addTarget:self action: functionName
forControlEvents:UIControlEventTouchUpInside];
}
There was a bug in one of the compilers shipped with Xcode 4.2 where it miscompiled thumb code for armv6. One of the ways this manifested itself was interfering with
CGRectand similar structures, which obviously mangled layouts.A temporary workaround was to disable thumb for armv6, but the bug was fixed in Xcode 4.2.1. Have you upgraded from 4.2 to 4.2.1 since submitting the application to the App Store? That could be why you can’t reproduce the bug now.
It is likely you can fix the bug by simply recompiling with the latest version of Xcode and resubmitting. I would roll back to the earlier version of Xcode and verify with an actual device beforehand if possible though.