I'm using SpriteKit to do quite a bit of UI and layout. For my card game Pharaoh, I'm using the .sks editor to lay out the location of all the UI elements and hooking them up to the functionality using the class-setting feature of the editor.
I find it easy enough to use. There are a few rough edges here and there, but for the most part, I find it very easy to lay out and wire up a new scene's UI with the .sks editor in Xcode.
There are a few "best practices" I've settled on:
* Use the "Aspect Fit" or "Aspect Fill" sizing mode for your scenes, and pick a reference size for all your scenes. Then, parent the stuff you want to move around based on the form factor of the device you're using to some appropriately-named SKNodes, like "top", "upperLeft", "lowerRight", "center", etc. I wrote a custom extension to SKScene that allows adopting that reference width or height, and then pegs those nodes to the extents of the scene so I can use those nodes in all my scenes and forget about them. No matter what device I'm running it on, it all uses the same .sks files.
* Don't bother with overriding init() or init(coder:) for your SKScene's or even SKNode's. Wiring things up for your scenes is just as easily done in your didMove(toView:). Learn to use the childNode(withName:) syntax, and you will be able to grab references to whatever you need to in the scene. Cast them to whatever it is you expect them to be, and you can configure them however you need to in the scene. Tear everything down in willMove(fromView:). Edit: It looks like there is a sceneDidLoad() function that may be a better choice than didMove(toView:) for this stuff. It's new in OS 10.0, so it's not backwards-compatible, but it makes your initialization safe to do in another thread while still avoiding the double-init dance.
* Expressive naming will really help with the above and your code readability - it's obvious what scene.childNode(withName: "QuitButton") is getting a reference to. It also helps you navigate your scene using the inspector.
* You can set SKNodes, SKScenes, SKSpriteNodes, etc. to use a custom subclass by typing the name of the class in the editor. (You have to click over to another panel in the inspector.) This allows you to define specific functionality for the things you add to your scene. For instance, I made a "Button" class that is a subclass of SKSpriteNode, so I can turn any sprite I drag into the scene into a button just by typing in the word "Button" in the class field. Since it accepts a closure for its action, I can just wire up its action in didMove(toView:) by grabbing a reference to the button as mentioned above.
* I also like to create "Templates" of things that will be spawned at runtime. For instance, in my game, I have a card almanac that you can swipe through to see information on all the different cards. In the .sks file, I have a SKNode called "Template" that has a SKSpriteNode for showing the card, an SKLabelNode for the name of the card, etc. To make the individual card displays, I just grab a copy of the "Template" node, remove it from the scene, and for every card I want to show, I copy the template, grab the appropriate children of the copy to set the sprite's image and the label's text, and add the copy to the scene. This allows me to do things like change the spacing, the font, the scale, and other things for these dynamic elements using the .sks editor GUI.
* Control your z-depth. I try to have a plan for where all the important z-levels are going to "land" so that when I create some new element, I set its z position accordingly. This requires a bit of discipline, especially as you go parenting things to other SKNodes, since you sometimes have to do a little math to figure out a node's "real" z position, but it pays off. Everything defaults to zero z-position, which can cause problems if you just let it sit there. Always be explicit about it, and you will save yourself some headaches.
* Remember that when you cut and paste an element in the .sks editor, it puts it 20pt to the right and 20pt down. A quick shift-up-up-left-left will put whatever you pasted right where the source was. Handy for making arrays of things or copying oft-used layouts to other scenes.
Hope this helps.