change hight of the tableView cell does not work - ios

hello guys now I have UITableViewCell should have dynamic height , this cell have 3 labels , I have added them in to stack and I added all requirements
to let tableViewCell be dynamic height
1- The code used for automatic cell height
notifications.rowHeight = UITableView.automaticDimension
notifications.estimatedRowHeight = 150
2- I have set constraints leading and trailing and bottom and top space to the superView.
3- The number of lines for each label is equal zero
this is cell before run
enter link description here
this cell after run https://ibb.co/5YCMpfK

The constraints of your tableViewCell must be like:
Properties of stackView:
Axis: Vertical
Alignment: Fill
Distribution: Fill Proportionally
Spacing: 5 (as per your requirement)
Number of lines of all 3 labels = 0

Check if your stack view doesn't have height constraint.
Check if your labels do not have any height constraint.
Give your stackview top and bottom constraints a specific value and make them greater than equal to topContraint >= 5 bottomconstraint >=5.
Change the property of stack view to Fill proportionally and give spacing according to your needs.

Related

Custom UITableViewCell - adjust UILabel vertical alignment dynamically

I have a custom table cell. It has two labels (title and description), one below the other.
What I have right now is, title label top = topMargin. And description label top = title label bottom + 10.
But in some cases, there will be no description. In such cases, I want the title label to be centered vertically inside the cell. Is this possible? What constraints do I have to set?
A UIStackView makes it easy to do what you want.
Create a prototype cell
add two labels
embed them in a stack view
set the stack view's properties to:
Axis: Vertical
Alignment: Fill
Distribution: Fill Equally
Spacing: 10
constrain the stack view Top/Leading/Trailing/Bottom to 0 to the cell's content view's default margins (or set your own "padding")
set your fixed row height - with default labels + 10-point spacing + top and bottom margins, you'll probably want at least 67
connect the labels to IBOutlets
When you set the text of the labels in cellForRowAt indexPath:, set the description label's .isHidden property to true if it has a description, or to false if it doesn't.
The result (with background colors for clarity):
The result without background colors:

Label doesn't show all the text inside scrollView

I want the DecriptionLabel (the Lorem Ipsum one) to have all the text inside it visible. As you can see, it is getting trimmed.
The two buttons should be under everything else, but in the case where DescriptionLabel contains a small text, the buttons should stick to the bottom of the view.
This is why I chose a >= 20 distance between the buttons and DescriptionLabel if it makes any sense.
How can I solve the trimming of the text?
Thanks.
I was originally answering How to make button stick to bottom of scroll view if the content isn't large enough? but since it is marked as duplicate of this one I am posting my answer here. Please try to set your constraints the following way: https://imageshack.com/a/img923/6671/Txzu98.png
The trick is that you set Button.Bottom Equal To ContainerView.Bottom with lower priority (I use 750) than Button.Top Greater Than Or Equal To Label.Bottom (Here I use default 1000)
The Label has to have number of lines set to 0. The height of the button should be set by height constraint (in this case is 50). The Container View Height constraint should be with low priority (in this case 250)
You should run the code to see actual result on device or simulator. Storyboard shows it a bit differently. For the current question:
https://imageshack.com/a/img923/7276/tQeT0h.png The basic idea is the same. Button Down has the same constraints as Button from above answer without Button.Top Greater Than Or Equal To Label.Bottom. There should be fixed vertical constraint between Button Up and Button Down. I am setting Button Up with fixed Height and setting trailing and leading constraint equal to trailing and leading of Button Down. The constraint Button.Top Greater Than Or Equal To Label.Bottom is now Button Up.Top Greater Than Or Equal To Label.Bottom
Have you set numberOfLines for label to 0 (that means autosize the label according to its text length)?
You should add the following constraints:
(following in sudo code)
// Constraints for ScrollView
scrollView.top = ViewController.view.top
scrollView.leading = ViewController.view.leading
scrollView.trailing = ViewController.view.trailing
scrollView.bottom = ViewController.view.bottom
// Constraints for View
view.top = scrollView.top
view.leading = scrollView.leading
view.trailing = scrollView.trailing
view.bottom = scrollView.bottom
// Width of view
view.width = ViewController.view.width
Now you just need to make sure you have layout constraints for each child of the 'view' and it's height will be correct and display the full size of the textview.
Add the following constraint:
scrollview.contentview.height >= safearea.height
This may show an error in interface builder but works in my tests:
To remove the design time error you could set a design time intrinsic content size for the scrollview's contentview (in my case I used the safe area's height of 554):
Another option (without placeholder values in IB) is to create the following constraint...
scrollview.contentview.height = safearea.height
... and change its priority to a value lower than the label's vertical content compression resistancy.

How to add constraints programmaticaly to xib

I have cell with 3 labels. Labels have constraints to cell and to other labels. If I remove Label2 from superview then I will lost constraints and my cell will be changed. How to add constraints between Label1 and Label3 programmatically when I remove Label2.
Here you have two Options
1) Use UIStackView (MUST BE IOS9 +)
2) Constraints
as UIStackView answer is already given so I am suggesting you a 2nd way to do it
Similar I have implemented for horizontal aligned label
Follow the steps
1) Let's Say your label is L1, L2, L3 , Give Equal Height to each Label (Please drag L2, And L3 to L1 and give equal Height)
2) Set Equal Height constraint priority to 999
3) As in your case L2 is optional (May be hidden or removed as per your scenario) so give HEIGHT Constraint to L2 with constant 0 with priority 750 (YOUR CONSTRAINTS NEVER BREAK )
4) Take IBOutlet of that constraint
5) And give leading trailing top bottom whatever you need in my case it is 0
6) Now You just need to change priority whenever you need to show hide that label
func setupViewForMyMemoriams (){
self.priority_Width_L2.priority = UILayoutPriorityDefaultLow
// OR
self.priority_Width_L2.priority = UILayoutPriorityRequired
}
Hope it is helpful to you
Use UIStackView then it will automatically adjust the height.
Another way is not remove the Label2, but make the height become 0, wrap Label2 in an UIView that have height from top Label2 to Label3, then change the height of that UIView to 0, visually it will be Label2 got removed

Which Constraint we need to make dynamic View height in iOS

As I am new to iOS. So forgive me if it is duplicate or very basic question.
I am taking one View. Approx below is the size .
x : 5 y : 5
Width : 590 Height : 100
and I set constraint it
Top to superView 5
Trailing to superView 5
Leading to superView 5
Now I have one Label which have dynamic Text and the Text is too large.
And the Label Constraint is below
Top to superView 5
Trailing to superView 5
Leading to superView 5
and when i set the background color of the View the color is not set. If the Text is to Long. So how to set the Height of the View and also set background so that it looks clear.
Code :
public override void ViewDidLoad()
{
base.ViewDidLoad();
lbl_one.Text = "This is a long label which have long text inside the writing. This is a long label which have long text inside the writing. This is a long label which have long text inside the writing. This is a long label which have long text inside the writing";
lbl_one.LineBreakMode = UILineBreakMode.WordWrap;
lbl_one.Lines = 0;
view_main.BackgroundColor = UIColor.Red;
}
If I give fix Height then it look like this .
Output :
1. Give the below constraints to your view, height is according to your need. here I'm giving 80.
2. Change the height relationship.
3. Add aUILabel in your above UIview, and give below constraints.
--> leading, top, bottom, trailing to uiview and height i.e. 80.
4. set height relationship as you do with UIView.
5. Change the property of UILabel , Lines to zero
6. Now enjoy with your constraints.
EDIT: Add bottom constraint to your view instead of height constraint.
I don't see and bottom constraint added to UIView, so the view height will be 0.
If you have added the height constraint to UIView, there is a probability that UILablel might be overlapping the UIView, so you are not able to see the background color.
Set the UIView height constraint this will solve your problem
You can also add height or bottom constraint to your UIView.

set superview height constraint according to subview height constraint

1) View A , view B , View C height & width are equal
2) View A height depends on Label1 & Label2 height
3) View B height depends on Label3
4) View c height depends on Label4
5) I want to take max height from View A, View B & View C but all are equal
6) View X heights depend on max of (View A,View B & View C)
How to achieve this through auto-layout?
Thanks in advance
It can be done easily in the Xib or storyboard. Refer to the Screen shot of the constraints created.
V1 --> First View
V2 --> Second View
V3 --> Third View
V1L1 --> First View's First Label
V1L2 --> First View's Second Label
V2L1 --> Second View's First Label
V3L1 --> Third View's First Label
The first View is Having the width constraint of 180 and all the views(V1, V2, V3) are having equal width and equal height constraints.
All the Labels Lines count is set to zero in the attribute inspector, This enables the label height increase as text of the label is more.
The height of V1, V2 and V3 is determined by the content of the labels.
Views height increases based on the labels content and all the view are given equal heights , Hence the Content view height will be the height of the max(V1.height, V2.height, V3.height). Also V1.height = V2.height = V3.height = max(V1.height, V2.height, V3.height)
Below is at the clear image of constraints.

Resources