I am creating an app which will have a question in a UILabel
and a multiple choice answers displayed in UITableView
, each row showing a multiple choice. Questions and answers will vary, so I need this UITableView
to be dynamic in height.
I would like to find a sizeToFit
work around for the table. Where the table's frame is set to the height of all it's content.
Can anyone advise on how I can achieve this?
Swift 4.2 solution without KVO, DispatchQueue, setting constraints yourself. This solution is based on Gulz's answer.
1) Create a subclass of UITableView:
2) Add a
UITableView
to your layout and set constraints on all sides. Set the class of it toIntrinsicTableView
.3) You should see some errors, because Storyboard doesn't take our subclass'
intrinsicContentSize
into account. Fix this by opening the size inspector and overriding the intrinsicContentSize to a placeholder value. This is an override for design time. At runtime it will use the override in ourIntrinsicTableView
classUpdate: Changed code for Swift 4.2. If you're using a prior version, use
UIViewNoIntrinsicMetric
instead ofUIView.noIntrinsicMetric
Add an observer for the contentSize property on the table view, and adjust the frame size accordingly
then in the callback:
Hope this will help you.
Mimo's answer and Anooj VM 's answer both are awesome but there is a small problem if you have a large list, it's possible that the height of the frame will cutoff some of your cells.
So. I have modified the answer a little bit: