I was just trying to learn Autolayout in XCode 6. But I noticed a strange change in the XCode 6 that is whenever I drag and drop a button (or any UI element) on a xib the XCode isn't automatically adding the constraints to the button. However I do remember this facility was there in the previous versions of XCode. But in XCode 6 I had to explicitly add the constraints to the UI element. Here are the images of what happens in previous version of Xcode 6 and previous version of Xcode .
There we can see in XCode 6 no constraints have been added by default but however in previous version of XCode constraint was added by default.
So it would be helpful if you guys let me know if there's a way to enable the feature of adding constraints by default in XCode 6 or is it the way XCode 6 ways where we need to add constraints manually?
Thanks in advance :)
With the introduction of size classes, to have a universal storyboard for both iPhone and iPad, setting the constraints automatically wouldn't make much sense for me.
You can ask Xcode to resolve auto layout issues for you by pressing the (Resolve Auto Layout Issues) button in the lower right of the Interface Builder window and choosing “Add Missing Constraints”. The added constraints will fix the subviews relative to their superviews.
Adding the constraints automatically while editing was done in Xcode 4, and it was a disaster. Every time you moved a view, it broke something.
As of 5, any missing constraints will be added at compile time to your views. If you select a view and look in the size inspector, it will tell you this. See here for more details on constraints and interface builder.
Related
When I updated to XCode 8.1, it changed the constants for many of my constraints in my Storyboard and left it in a jumbled mess. I read in another post that the next XCode beta might fix it and am downloading it to try. It's a good sized storyboard and I would prefer not to have to redo all the constraints.
Does anyone know how to fix this issue? Thanks!
Xcode(8.1) has fixed this issues. This was a known issue in Xcode 8.0.
I have not used Xcode 8.2 but if you are facing issues you might want to stick to 8.1. You can refer here as well: -
Layout issues after updating to Xcode 8
Following is taken from Xcode 8.1 release notes:
Interface Builder
New Features
Added Custom Gesture Recognizer to the object library. Use it for custom subclasses of UIGestureRecognizer or NSGestureRecognizer instead of a plain NSObject. This resolves an issue where a combination of stock and custom gesture recognizers on a UIView fails to compile. (27838954)
There is a new Update Frames button at the bottom of the canvas. Click the button to update the frames of the selected objects and their children on the Interface Builder canvas. (27818991)
The Pin button at the bottom of the canvas has been renamed to Add New Constraints. (27819014)
Resolved Issues
Dragging content into static UITableView cell on the canvas works again. (28026179)
Fixed auto layout performance issue with NSStackView using Gravity
Areas distribution. (27910320)
Xcode 8.0 did not always restore view frames from storyboards and xibs when layouts were ambiguous. Xcode 8.1 fixes several of these issues. If you have encountered these issues, resolve the ambiguity in the Auto Layout issues and update frames. Xcode 8.1 will persist them correctly. (28221021, 28244619)
Resolved a layout hang when selecting Landscape orientation in the Device Bar on non-Retina displays when running on OS X 10.11. (27251685)
Xcode Debug Console no longer shows extra logging from system frameworks when debugging applications in the Simulator. (26652255, 27331147)
When using Swift 2.3, creating IBAction connections no longer inserts WithSender in the selector name. (25220368)
=== EDIT ========
This issue is now solved in Xcode 8.1. I have checked.
================
I don't know auto-layout properly. So, I am using autoresizing option in my all apps and it's fine for me. I am able to fulfill my all requirements by this without any issue.
Now in Xcode 8, I have migrated my old swift project to swift 3. Now issue arises.
See in image, I have set Autoresizing, and its working fine without issue in all devices until now and this project is live in AppStore, so that I can't show the UI or storyboard.
Now I have to do some update in project. So I am working in Xcode 8 now. But my autoresizing not working properly, as all the controls are come in center and UI is messed up.
And the issue persists in device also. I have checked in simulator and device as well. But problem is there also. Any suggestion and help will be appreciated. Thanks in advance.
EDIT:
Yesterday there is issue in runtime only, But Today storyboard also changed views like this image
Which means the whole UI design is messed up. This is weird.
Facing same issue. As a my point of view this problem is occurred when we use autoresizing and set only inner autoresizingMask to any view controller. Like,
If we use also boundary autoresizingMask at that time not facing this issue. Like,
I don't know this is actual bug of xcode 8 or remove this functionality in xcode 8.
So, Finally my suggestion is that we need to use auto layout in xcode 8.
Please try to uncheck autoresizing from xib or storyboard. And inviewDidLoad set [_scrollView setAutoresizesSubviews:YES];
Try it if this solve your problem
Edit: In case of storyboard uncheck Resize view from NIB option.
I'm not sure about storyboards but I've found a temporary solution for xib files. In Utilities panel (right hand panel) select File Inspector tab. Under Interface Builder Document section, select the file to open in "XCode 7.x". It will ask you to confirm that you do not want to use XCode 8 features, save the file and close it.
Xcode 8 beta 2 solved this problem!! I already checkeded now!
I had a similar issue for scrollView in Xcode8
I have an one solution to work with scrollView
First take a simple UIView and add all component which you want add to in scrollView and give that component to autoSizing
And also take one scrollView and programmatically set view frame and also set scrollView contentSize and add your view into scrollView
like wise, in my case I added this code in viewDidLoad for swift project
// add view to scrollview
self.scrollObjForNextAppointment.contentSize = CGSize(width:self.scrollObjForNextAppointment.frame.size.width,height:410)
self.viewForScrollContent.frame = CGRect(x:0,y:0,width:self.scrollObjForNextAppointment.frame.size.width,height:410)
self.scrollObjForNextAppointment.addSubview(self.viewForScrollContent)
it's work for me, Thanks!
Solved by unchecking "Auto Resize Subviews" to ScrollView
Update the issue seems to have been fixed in Xcode 8.1
Having the same issue and I've found that the offender here is the UIScrollView element. Just move everything outside of your scroller and you will see that everything works just fine, like before.
Which means one possible workaround would be to place your scrollable content in an ordinary UIView, then replacing it with UIScrollView at run time, programmatically.
A moderator kindly deleted my answer here as a duplicate, so see my answer at:
Autoresizing under iOS 10 doesn't work
In response to max, yes, resizing a bunch of subviews can be a pain. That's why I suggested adding a single "content view" to the scroll view and moving all of your existing subviews inside of that view. Autosize the subviews inside of the content view just as you did with the scrollview, and autosize the content view to the scrollview.
It's that content view that you're then resizing inside viewDidLayoutSubviews.
And again, the "content view" inside of the scrollview construct is pretty much the standard way to get auto-sizing scroll views using autolayout, so it should be considered a best practice.
That method is described here...
https://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/
My method seems a little convoluted, but I was able to patch up a storyboard with about a dozen scenes and Vc's in about 15 minutes. It would have taken much, much, much longer to rebuild everything using auto layout.
Apple just came out with XCode 8.2, which fixes this problem for me. I have been using XCode 7.3.1 for my interface design parallel to 8.1, but I can now use 8.2 without any problems.
The storyboard gets updated with widths and height of frames though, to accommodate the new 'View as:' functionality. Though it doesn't seem to affect running on device/simulator.
Curiously, the bugfix it is not noted in the XCode 8.2 release notes.
Original answer here
I wrote an app for iOS4 or iOS5. I upgraded it to iOS6. Adding the new constraints were rather traumatic (I had to almost completely redo the Storyboard and I had to create a bunch of constraints since they didn't exist before), but I got through it. Now I'm upgrading to iOS8 using XCode 6.4. I have written other apps in iOS8 and the constraint icons are always on the bottom; there are 3 of them: Align, Pin, and Resolve Auto-Layout. However, in this older app, all of these icons are missing (also the W Any H Any in the middle is missing as well). One of the constraints is wrong, but I can't fix it because I don't have any constraint icons. How do I get them back?
Here is a new app that shows the constraint icons:
Here is the old app with the constraint icons missing:
Select the storyboard (on the left) and the File inspector (on the right; not present in your screen shots, you'll have to show it deliberately). The File inspector has a Use Auto Layout checkbox. If the storyboard doesn't use auto layout, you won't see those constraint icons.
If the autolayout checkbox is not available, quiting Xcode and reopening worked for me.
In my storyboard file, I would like to add constraints, but the button to insert constraint is not shown! Any idea how to get it back?
Make sure auto layout is enabled if you want to use the auto layout controls.
Autolayout Enabled:
Autolayout Disabled: Note the controls are missing.
If you're looking to use auto layout with UIScrollView it should probably be asked in another question. But very briefly, when using auto layout, the place most people trip up is that UIScrollView determines its content size based on your constraints within the scrollview. If those are set right, you should be good to go.
Good luck.
Quiting Xcode and reopening worked for me.
I found that sometimes constraints are not shown when wantsLayer property is checked in the Interface Builder. (only on OSX, not on iOS)
Quit and reopen. I found out that works the best in Xcode 11 and above. there is no "Auto layout" click option in Xcode 11 so just quit and reopen
I have a view with some tableviews and some collection views and also some buttons and labels.
I'm not sure if this is new with Xcode 6.1 because I have not worked on the ui aspect of this project for some time. However, when I try to resize just about anything in the view, my tableviews and collection views, and possibly some other elements I am not noticing, get deleted. Specifically, it seems their frame or rect propertied get deleted.
To be clear, this only occurs when I attempt to resize the element by dragging the sides in interface builder. If I resize them by changing the numbers directly either in the IB sidebar or in the xml, this does not happen.
I'm wondering if this is a bug in Xcode or if I have done something to cause this behavior which I can change.
Thanks!
I acheived a fix, at least for this project by turning off auto layout in "show the file inspector" -> "interface builder document"
I have never used this feature in the past so I do not know if it was on in the past but I am wondering if the new Xcode version turns it on by default where the others left it off.
It may also be possible that it has always been on but there is a bug in the feature in the new version.
This fixed the issue for me, at least in this particular project and at least for now. I hope others find this useful.
From here it looks like a bug in Xcode 6.1.
I created a clean project and the behaviour is the same on my machine:
https://github.com/nasht/Xcode6ConstraintTest.git
Resizing one view makes others disappear. Changing a layout constraint from a = to <= or >= also seems to do it.
I've raised a bug with Apple. Suggest you do the same.
workaround: You can install xcode 6.01 and use interface builder from there. You can still compile and run your code using xcode 6.1 if you're relying on xcode 6.1 specific features. (you'll need to rename your xcode.app so you can run both instances. ) It's ugly, but it works.
I found that it's fixed on the next version of xcode (6.1.1)
same problem, yosemit and xocde 6.1. I can resize some view only if i disable autolayout.
I think I ran into this 'problem'. I believe this was because one of the constraints I had was not setup correctly.
What OS X Version are you on? I updated to Yosemite today and 6.1 along with it. When I would resize a label my other elements were not getting deleted but instead getting resized and repositioned. The width / height would change to 0,0 and the x / y would change to 0,0 as well.
I was noticing other issues with Yosemite so went ahead and did a time capsule restore back to Mavericks and Xcode 6.0
I had the same problem in universal app; iphone works fine and the ipad doesnt work.
I'm using xCode 6.1 and OSX Yosemite
My app supports iOS7 and iOS8 and i had the same problem on iOS7 on iPad version only
Fix:
So i fixed it by setting Simulated Metrics in interface builder by
Size = iPad Full Screen and Orientation by Landscape or Portrait
I have got the same kind of problem with Xcode 6.1 and Yosemite :
I have created a view that I have added to the main view, so it appears like a sub view in the View Controller Scene.
Then I resize this subview to 320 x 568. My program works. It corresponds to the program dropit of Stanford CS193P Lecture 9.
I save the project, close it and reopen it : the subview has its width and height set to 0 !
I tried to open the project dropit of Lecture 8 that is quite the same, which was working before (I think in Xcode 6) and same problem ! First I thought that tapping (related to the subview) was not working but found out that tapping was not working because I was tapping on a subview which has its width and height set to 0 !
I have reset the size class wCompact hAny to which all the UIElements are added. and got corrected.