user3673836
user3673836

Reputation: 591

Swift: programmatically align labels for different IOS screen sizes

I'm new to Swift and ios development. I have 6 labels and a horizontal SKScene in my App. I would like to align those 6 labels beautifully and automatically. Now I have fixed the positions and the alignment always looks awful on some screen size while good on other.

I have not used storyboards or other graphical editors for building the ui but everything is done in code. Therefore I'm looking for a programmatic solution (code examples) for handling the alignment.

Upvotes: 4

Views: 4405

Answers (3)

TheCodeComposer
TheCodeComposer

Reputation: 711

If you want to place them in the middle of the screen horizontally, but give them different y positions, you could just do something like this for each label:

label.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMaxY(self.frame) * 0.80)

To place them at different y positions, just multiply by the maxY by a different decimal number. This way, all of the labels are aligned along the x-axis and appear at different y-positions, like a column and they will appear this way on every screen size because they are positioned relative to the screen size and not in a fixed position.

Upvotes: 2

user594883
user594883

Reputation: 1351

What I ended up doing was to create an empty SKSprite to which I included the SKLabels. Now I can control by the pixed the distances between labels but align the top-level sprite in the middle of the screen despite screen size.

Upvotes: 1

Nikos M.
Nikos M.

Reputation: 13783

You can align the labels (lets say at the center of the screen) like this.

var label1 = UILabel(CGRectMake: 0, 0, 200, 40)
label1.center = CGPointMake(UIScreen.mainScreen().bounds.size.width/2, 30)

var label2 = UILabel(CGRectMake: 0, 0, 200, 40)
label2.center = CGPointMake(UIScreen.mainScreen().bounds.size.width/2, label1.center.y + 30)

and so on. Just reference the main screen bounds and not static points for alignment, so that they are centered in any screen size.

Upvotes: 1

Related Questions