Indeed, Auto Layout fixes it quite nicely.
In this example, since there are only three rows and two columns, admitting the space between controls and margins is constant, a simple division of the width and height will do for listboxes dimensions.
Something like this :
thewidth = (self.width-(spacer3))/2
theheight = (self.height-(spacer4))/3
Then you could do some autolayout stuff, making controls relative to each other
If you number listboxes in columns top to bottom 1,2,3 then 21, 22, 23 :
LB1.left = spacer
LB2.left = spacer
LB2.left = spacer
LB1.Top = spacer
LB2.Top = LB1.Top+LB1.Height+spacer
LB3.Top = LB2.Top+LB2.Height+spacer
Now labels (assuming they do not grow)
Label1.Left = LB1.Left
Label1.Top = LB1.Top-Label1.Height
Label2.Left = LB2.Left
Label2.Top = LB2.Top-Label2.Height
Label3.Left = LB3.Left
Label3.Top = LB3.Top-Label3.Height
Second row left is relative to LB1
LB21.Left = LB1.Left+LB1.width+spacer
LB22.Left = LB1.Left+LB1.width+spacer
LB23.Left = LB1.Left+LB1.width+spacer
Then you do the same for vertical spacing as in the first column
LB21.Top = spacer
LB22.Top = LB21.Top+LB21.Height+spacer
LB23.Top = LB22.Top+LB22.Height+spacer
Now labels (assuming they do not grow)
Label21.Left = LB21.Left
Label21.Top = LB21.Top-Label21.Height
Label22.Left = LB22.Left
Label22.Top = LB22.Top-Label22.Height
Label23.Left = LB23.Left
Label23.Top = LB23.Top-Label23.Height
This may look kind of tedious. With autolayout in iOS, you would have to set the relative to controls in each listbox inspector along the same principle. In essence, it is just as much work…