I am making an app that has two buttons on the main screen. I have used auto layout and placed constraints that fit my needs for the app. On all iPhones but the 4s, both of the UIButtons show up, but on the 4s, one does while the other doesn't. Here are two photos of the simulator.
iPhone 5s:
iPhone 4s:
As you can see, the "Log In" button on the 4s has no background. It is impossible to click on it. Any help in fixing this issue would be greatly appreciated.
As you are saying that it is impossible to click it in 4S (and it is possible in 5S etc.) that means that the real button is missing from 4S.
If you have a label and a background white rectangle or second label as the real button, then you might miss some constraints for this rectangle/label.
It appears that it is not centered horizontally related to the content view or related to the text label "Log in" (so it is lost in the far left or right of the view). Another possibility is that the width or hight becomes 0 due to missing constraint. If these options do not help, you may share your storyboard if you wish and especially the outline view, in order that you get more help from the community.
Related
In my iOS app, I just want to have a button located in the middle of screens of multiple devices (like iPhone 6, iPhone SE, iPad Air).
However, surprisingly, it seems not intuitive to do (at least not as Android) in XCode + Xib.
Following shows a trivial example of this problem where I put the button aligned to the middle:
However, unless the "dimension" of the view is set identical to fit the installed device, there is no way to display the button in the middle.
Add horizontal and vertical center constraints as follows and it will always keep your button at center of any screen as shown in the image below
You can also add distance constraints to borders of the screen :
Example
Just having an Xcode issue that I'm sure is tied to some setting I can't find. Im my storyboard, my content fills the entire view (i.e a background image), but then when I run my app in the iPhone 6 simulator, the background image and all the content don't fill the entire screen. There is white space to the right of and below the content on the simulated "screen".
When I run the app in the iPhone 5 simulator, this isn't an issue and it fills the entire simulated view.
So, what did I miss? I want to make my app work on all models of the iPhone.
Thanks for any help!
There are several ways to solve this, and I guess you are using View Size as Inferred or iPhone4 Inch in Attribute Inspector.
First way is to use AutoLayout at Storyboard to add Constraint.
If you don't want to use this, you should at least set the Autoresizing at Size Inspector.
"White space to the right of and below the content" sounds like there are scroll bars being displayed in your window. The iPhone 6 simulator is a different size, as well, which would account for them not being there on the iPhone 5 sim.
Have you tried going to the Home Screen (Shift + Command + H) in your simulator, and seeing if the white bars remain? On my computer, the white bars are always visible. Annoying, yes, but they don't cover anything or hide any part of the view. It's just a bit of white padding on two sides.
I'm using xcode 6.1.1 version and iPhone 6 plus as testing device. I simply add a button at the right side of my xcode user interface, selecting Simulated Metrics size for iPhone 5.5-inch like this :
But when I run this on device the button goes far away from the right edge. Like this (Snap shoot from my device):
But when I select Simulated Metrics size for iPhone 4.7-inch like this :
It shows accurately in my device. Like this (Snap shoot from my device):
I tried with selecting and un selecting Auto Layout & Size Classes but do not get any clue. My device is 5.5 inch iPhone 6 plus. I even recheck it from my iPhone's packet and by IMEI Number. My question is why it is acting like iPhone 6 interface?? Is it for any reason of retina display or non retina display??
Thanks a lot in advanced.
My button's Constraints:
Select the button/ view you want. Then simply use the shortcut ⌥⇧⌘=. This will Reset to Suggested Constraints.
For this to work successfully, try moving your button to the suggested areas, i.e. move the button/ view to the top right corner like you have till the dotted blue lines appear.
Once done it should show what you expect on the interface builder but to be sure test on the simulator and/ or Device.
You need to add the proper constraints. Using simulated metrics is only for setting things up in IB, it has no effect on what the view looks like at run time. You should leave that setting at inferred.
If you don't add constraints yourself, the system adds them for you, and it adds top, left, height, and width constraints; that is not what you want. You need to add constraints to the top and right side. If you do that, the button will appear with that spacing to the right side, no matter what size screen you're using.
I think you should use constraints to solve the problem but i don't know the exact cause of this
Ctrl + drag from the item to the border in the storyboard to add constraints
I solved this before posting, but I'm sharing this anyway just in case it helps someone else.
I'm having a problem with certain buttons sizing incorrectly on iOS8. They are coming out too tall, too wide, and the label is vertically misaligned. Interestingly, though the button is x-centered on the signin view, it maintains alignment on the left side. I'm still building on Xcode 5/iOS 7 as we have some higher priority issues we need to get out and building against iOS 8 breaks more than this. Are there different constraints I can apply here?
I've included the background image slicing also. It is 66x87 px, but the button is getting sized to 72px tall, so I'm not sure it is be related or not.
The problem here was that I did not have an #2x image for the button background. The button background is just a flat color so there was no real need for an #2x before.
I am using Xcode 4.5 and iPhone 4 and 5 simulator, and the Interface Builder would add a UIButton in the top half of the screen with a top constraint, and add a UIButton in the bottom half of the screen with a bottom constraint.
It works fine on an iPhone 5 simulator, but on the iPhone 4 simulator, the buttons can overlap, or the bottom button may even get positioned above the top button.
I think it is due to the constraint, such as the bottom button "must be 250 points away from the bottom margin". I can't delete the constraint, and if I change it to "250 points or less", it won't work, if I change it to "250 points or more", it won't work either.
Is there a way to:
1) Make it have no constraint, but just position at absolute x and y? (or what about the spring in the past, so that everything is more spaced out in iPhone 5?)
2) Make the NIB into a one for iPhone 4 and 4S only, so that the app works well on iPhone 4 and 4S and just "black barred" on the iPhone 5.
3) Make it work well on iPhone 5 and work well on iPhone 4 as well?
If you know solutions to only (1), (2), or (3), above, please give it regardless, as it is still a viable solution for the transition period.
It is actually very easy to reproduce: Create a simple Single View app using Xcode 4.5, and drag one button just above the center point of the screen, and another one just below the center point of the screen. Then run it on the Simulator. On iPhone 5, it is:
And now stop the app, and change the Device in the Simulator to iPhone 4S (3.5 inch Retina). If you don't stop the app first, the Simulator can crash. Now run the app again, and the buttons will overlap:
I had the same problem, and it was due to a wrong settings for autosizing. To change the autosizing, click on the control in the interface builder, go to the size inspector.
Notice the bold red I's in the autosizing grid, they control placement when the screen is resized (like when going from iPhone 3GS to iPhone 5.
I think it will work best for you if you make your autosizing look like this:
I'm not sure, since I haven't used constraint-based layout (and won't until we drop support for iOS 5). Traditional NIB-based autoresizing will do absolute coordinates.
You can't do that for just one screen, as far as I know — you can disable it for your whole app by removing Default-568h#2x.png.
I'd go for programmatic layout, or if you want the easy way (which will be a pain to maintain), different nibs for different screen sizes. Note that you'll want to correctly handle the in-call status bar too...
EDIT: Put the two buttons in a container view and make the constraint center the container inside its parent? It won't adjust the spacing between buttons, but should look okay on both devices.
Select your buttons and add "vertical spacing" constraint for them. And set "less than" for top/bottom margins.