In the Xcode Interface Builder (IB), I have created:
standard ViewController (VC); and
TableViewController (TVC).
I'm working with 4.7 inch screen size (375 x 667 points) for both VC and TVC.
In the VC, I have status bar (20 points) and toolbar (44 points) at top of screen. I 'dragged-in' a container (375 x 603 points) to fill the balance of the VC space (also using the IB).
I embedded a separate TVC in the said container and then added a table list to the TVC which I populated with several sections and respective cells.
In these respective cells, I have added some text labels and images.
The TVC and container in the VC are of the same width according to IB, but when I run the project in a simulator and my iPhone to test, the width of the visible tableview in my VC is 'shorter' than the actual TVC's contents.
In simple words, I am missing the 'right hand part' of the content of every cell in the table view.
How can I amend my alignments such that 100% width of each call in my table view shows up in the container and therefore in my VC and actual view?
Note: I embedded my TVC into the container of a VC because I wanted the table view to use static cells and not dynamic cells.
I was over thinking this.
I solved my problem by simply setting the mode of the container to 'aspect width' (in the Xcode IB) and it seems to solve the problem.
Everything scaled horizontally (and vertically) perfectly now to fit whatever content is in my embedded TVC.
Related
I have a custom view that gets loaded from nib that has a number of subviews. Some of these subviews contain labels which can be a dynamic height. This view ends up being added as a subview to a view that is in a scroll view.
Think ScrollView > View > SubView > Dynamic Labels
I am using auto layout constraints and therefore need to set the height of SubView that is required to display all the content in itself, so that the ScrollView will scroll the length necessary to display everything in the SubView.
I know with a UILabel, you can do something like val neededLabelHeight = label.sizeThatFits(CGFloat(width: label.frame.height, height: CGFloat.greatestFiniteMagnitude)) to get the needed height to display on a single label, but when I attempt to do this on a whole custom view loaded from nib, it just has the height of the view I have in my nib file.
Is there something similar for doing it on a view with more subviews, other than calculating the needed hight of the view by summing all the needed heights of its subviews and vertical constraints?
Here is a simple example...
The XIB file looks like this:
Note: the Bottom Label has a constraint of >= 8 to the bottom of the view. That way you don't have to worry about IB showing an error during design. Any extra space at the bottom will automatically "disappear" at run-time.
The Storyboard looks like this:
The scroll view has a red background (to make it easy to see). The labels and views containing buttons are laid-out and constraints are set as we normally set them.
The "Blue" view - TheXIB Container View - has a Height constraint of 120, but is set as a Placeholder that will be removed at run-time, allowing the view loaded from the XIB to control its height. This will be the view to which we add our Labels Holder View from the XIB.
Here's how it looks with a small amount of text:
It's not scrollable, because there isn't enough content.
After tapping the "Add" buttons a few times, it looks like this:
and it is scrollable (we can see it's scrolled down in this image).
For folks who prefer using a "content view" as the "root" view of a scroll view, it works the same (orange view is the content view, inset by 8-pts on each side):
Here is a link to this example project: https://github.com/DonMag/LoadXIBIntoScroll
And here's a gif animation of it in action:
I have a screen with UINavigationController and UITabBar.
The UINavigationController screen is a UIView (in figure below, in red), that haves an image in the top and a UIScrollView (in figure below, in green). The UIScrollView have two UILabel ("Some text") and a UITableView that DO NOT ENABLE SCROLLING.
Every time the list become bigger, i need to enlarge the tableview height, dynamically. At the same time, I think I need to enlarge the UIScrollView. See the image below:
How can I define the dynamical height to UITableView and UIScrollView?
My goal is: Every time the list become bigger, the UIScrollView become bigger too.
My environment:
My UITableView DO NOT ENABLE SCROLLING
I am using XCode 4.6 and the view is a FreeForm
My view is using AutoLayout
I tried to do this setting just the UItableview height, without success.
How can I do this?
You can calculate the height of table view bin the method
heightForCellAtIndexPath:
in this method you pass the height of each row in this you can calculate height by creating a globale variable and in this variable add the row height each time.
or you can find it by having no of rows * height of a row in height of a row is constant.
may this will help you.
I've got an app that worked OK in iOS 4 but is having several problems in iOS 5 because of the tab bar related changes. In a couple of cases I have a UINavigationController with no buttons and a UITableView as the root view. The UINavigationBar background header image is fairly tall, and as a result the top row of the table is getting hidden. I need to somehow move the root view controller origin down about 40 pixels.
I've tried setting the nav bar height -- this just hides more of the table as I increase its height.
I've tried setting the origin of the root view controller's view -- this seems to be ignored.
I'm kind of running out of ideas.
Anyone know how to push the origin of the table view down?
Well, after scanning through all the superclass methods about 6 times I finally realized that a UITableViewController has a UITableView which is a subclass of UIScrollView, and UIScrollView has the inset property. Setting the top inset (which is, oddly, in points) provides padding above the start of the table.
The scroll view still wants to display the table scrolled up with the first row hidden behind the header, but doing scrollRectToVisible: fixes that.
In my UIViewController that I use for my UIPopoverController, I have a label on top, a segmented control, and then a UITableView below it. When I created my .xib for the content view, I put in a table, and centered the label and segmented control within the .xib.
When I present the popover, I do not want it taking the whole screen. I use about (800,700) points to display the popover, but then the labels do not look right. They are not centered within the popover since the popover is now smaller than the .xib. What I did was move the label and segmented control to the left to make it centered in IB. That doesn't seem the best and future proof way of doing it. I was hoping I could do something programatically by taking the width size and dividing by 2 or something and centering based on that. Any advice? Thanks.
There are a couple of options:
Check out the documentation for the popoverContentSize property on the UIPopoverController, you should set it to be the size of the XIB that provides the content (so the XIB and popover both have the same size/contentSize, essentially).
Set the autoresizing masks on the subviews in the XIB so that they lay themselves out correctly dependant on the size of the XIB. To center them within their parent view you do NOT want the left and right mask setting (they should both be deselected in Interface Builder). This guide covers centering subviews: http://www.techotopia.com/index.php/IPhone_Rotation,_View_Resizing_and_Layout_Handling
Setup: I have a UIView with a scroll view nested within it. Within the scroll view I have a label, uiimage, and a tableview (grouped). The label, uiimage, and tableveiw are populated by a webservice. The last section in the grouped table view contains text that will never be the same and could be as long as 5 characters to 250+. Also, this view is pushed from a basic tableview (so it has a navigation bar. If that matters at all).
Expected: The uiview should extend in height depending on the height tableview extends to. Then I will be able to set the scrollview to accommodate the height I need to be able to scroll.
Problem: I'm not quite sure how to approach the issue. I really only know how to change the height to fixed values, which will not work properly in almost any scenario.
Am I using UIScrollView incorrectly? Do I need to resize the UIView at all?
You don't have to modify your UIView frame size, which has to be the size of your screen. The UIScrollView frame size must also be the same, it represents the part of its view actually displayed.
What must change is the UIScrollView contentSize, which defines height and width for data inside it ;)
You can calculate it using each inside element's height and by adding the correct margin.
Thus, you could have a UIScrollView content size of 320 * 600, which will let you automatically scroll down.
In fact, you have to display your content independently of the final frame size. If you have a content of 500*500, just display it inside your UIScrollView. Then tell it the size of it's content, and it will automatically set scrolling possibilities if needed.
Turns out I had to create a UIView programmatically and set it as the header of the UITableView. It works perfectly now. :)