delete lines between UITableViewCells in UITableView - ios

I've created an UITableView with UITableViewCell. Between the view cells there are grew lines. I want to delete these lines and don't want to show them, but I don't know how.
I work with Xcode 6.1 and Swift.
Here is a screenshot that displays my screen:
THX!

Using Objective-C, we have:
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
for Swift 3:
self.tableView.separatorStyle = .none
for Swift 2:
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
OR:
if you are using the InterfaceBuilder, you can set the tableView's Separator property to None

Within InterfaceBuilder you can set the Separator property to None or do it programmatically by setting the property separatorStyle of your table view to UITableViewCellSeparatorStyleNone.

Swift 3:
tableView.separatorStyle = UITableViewCellSeparatorStyle.none

You can do it from storyboard like this;

Swift 5 Programmatically
private func buildTableView() -> UITableView {
let tableView = UITableView()
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.separatorStyle = .none
return tableView
}

Swift 5 :
cell.selectionStyle = UITableViewCell.SelectionStyle.none

tableView.separatorStyle = .none
when initializing the tableview. It can be set or through the storyboard or nib

If you are setting up a lazy tableView, you may want to change the color to clear, seems like an Apple bug where sometimes the style is replaced on layout cycles.
private lazy var tableView: UITableView = {
let table = UITableView(frame: self.view.bounds, style: .insetGrouped)
table.separatorStyle = .none // <- HERE
table.separatorColor = .clear // <- HERE
table.delegate = self
table.dataSource = self
table.estimatedRowHeight = UITableView.automaticDimension
table.register(UITableView.self, forCellReuseIdentifier: "MyCell")
return table
}()

Related

how to remove the white space that appears below the uitableview

As shown in the [figure]
when I scroll down to the end appears a large block with nothing, How to remove this and scroll the scroll only until the end of UiTableView content?
the following images describe the configuration of my uitableview in the storyboard:storyboar_one, storyboard_two, storyboard_three
this my viewDidLoad Method:
override func viewDidLoad() {
super.viewDidLoad();
tableView.dataSource = self
tableView.delegate = self
let nib: UINib = UINib(nibName: "ObrigacaoTableViewCell", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: "reuseIdentifier")
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 150
}
Try self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Because the table thinks there is a footer to show, it doesn't display any cells beyond those you explicitly asked for therefore it shows up as a blank space.
Also make sure the bottom edge inset of UITableView is 0
To remove blank cells in the table keep the below code in viewDidLoad() method after estimatedHeight,
tableView.tableFooterView = UIView(frame: .zero)
Remove empty cells in UITableView
self.tableView.tableFooterView = UIView()

Remove UITableView separator line

I want to remove the line between 2 views. The line that separates 2 UITableViewCells:
I declared table view as following:
self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
self.tableView.scrollEnabled = NO;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.estimatedRowHeight = 85.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;
So i actually wrote - self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
Why does it still exist?
Objective-C :
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
Swift:
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
Swift 5.0 renamed it in :
self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
Apply the line in viewDidLoad() method.
If you want to do it from nib file, set the tableView's Separator property to None
For Swift 4:
tableView.separatorStyle = .none
For Swift 5 :
viewDidLoad(){
tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
}
For Objective-C :
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
or you can use interface builder instead
For more information
SeparatorStyle
Hide tableView separators using UI
Here you select TableView 'Separator' property as 'None'.
https://i.stack.imgur.com/8KyH5.png
You can use the following code because it will not remove the line separators of the sections.:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Your code here //
cell.separatorInset = UIEdgeInsetsMake(0.f, [UIScreen mainScreen].bounds.size.width, 0.f, 0.f);
}
My problem was when I add tableView trough code and I have separate func to show tableview and add it on mainView (slide from bottom) I needed to add this
tableView.separatorStyle = .none
in that func where tableView is added on mainView and constraint it.
In Swift 4.2 you can conveniently use dot notation on a tableView's separatorStyle. Like so:
tableView.separatorStyle = .none
As #gonsee point out:
"Setting separatorStyle seems to have no effect unless the table view is in the window's view hierarchy. If you have a table view on some UIView subclass"
You should set the seperatorStyle in viewDidAppear if you your table in UIView.
override func viewDidAppear(_ animated: Bool) {
self.contentView.documentTableView.separatorStyle = .none
}
In viewDidLoad add tableView.separatorStyle = .none
Example:
override func viewDidLoad() {
super.viewDidLoad()
...
self.tableView.separatorStyle = .none // <---
...
}
you can archive these things in different ways
you can also use this one line of code in viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
}
You can do it on a storyboard
set the code in viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
tableView.separatorStyle = .none
}
add this line
tableView.separatorStyle = .none

UITableView background color and separator style change not working

I tried to change the background and separator style in a UITableView, but nothing happens. In the snippet below, everything besides those changes works.
This tableView is located in a #IBDesignable UIView. Best part is, that everything shows as it should in the interface builder. The colors change, the separators dissapear.
func getTableViewToDisplayRecords() -> UITableView {
let tableView:UITableView = UITableView(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: self.frame.size.width, height: (self.frame.size.height * 3) / 4)), style: UITableViewStyle.Plain)
tableView.dataSource = self
tableView.delegate = self
tableView.tableFooterView = UIView(frame:CGRectZero)
tableView.backgroundColor = UIColor.clearColor()
tableView.separatorStyle = .None
return tableView
}
What could be causing this behavior?
----- EDIT -----
I have managed to do a workaround:
UITableView.appearance().backgroundColor = UIColor.clearColor()
UITableView.appearance().separatorStyle = .None
Now everything works fine, although this is not really a solution of the problem. Any new ideas anyone?
Try the code snippet below to change the background colour of UITableview along with no separator between the table cell's.
{
tableView.backgroundColor = UIColor.clearColor()
tableView.separatorStyle = UITableViewCellSeparatorStyle.None
}
Also, you need to change the background color of UITableViewCells
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
// change the background color of cell, which is by-default white
cell.backgroundColor = UIColor.clearColor()
return cell
}
Here is the screenshot with the table background color being red (for demonstration purpose) and no seperator between cell.
And here is another image with table background being red and single line seperator between cell.
Hope this helps!!
I think this is a Bug in UITableView.
When your tableView move to superview, sometimes the 'separatorStyle' property will reset to UITableViewCellSeparatorStyleSingleLine(the default style).
So you must set this property again when you finish frame change. Like this:
[self.view addSubview:_searchContentView];
_searchContentView.separatorStyle = UITableViewCellSeparatorStyleNone;

Custom cell clear background?

I have a tableview in a view controller that is dynamically populated with data from a database. Now I have set the tableview to be clear and it working correctly, but I have tried to set the cells to be clear to no avail ?
cell.backgroundColor = UIColor.clearColor()
That line has been placed in the cellForRowAtIndexPath function.
This little extension should help you.
The idea is to set the backgorundView to clear too and not just the backgroundColor:
extension UITableViewCell {
func setTransparent() {
let bgView: UIView = UIView()
bgView.backgroundColor = .clearColor()
self.backgroundView = bgView
self.backgroundColor = .clearColor()
}
}
Usage:
In the cellForRowAtIndexPath add the following line:
cell.setTransparent()

How can I set a UITableView to grouped style

I have a UITableViewController subclass with sections. The sections are showing with the default style (no rounded corners). How can I set the TableView style to grouped in the code? I'm not using Interface Builder for this, so I need something like
[self.tableView setGroupedStyle]
I searched on Stack Overflow, but couldn't come up with an answer.
You can do the following:
UITableView *myTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
Swift 3:
let tableView = UITableView.init(frame: CGRect.zero, style: .grouped)
If i understand what you mean, you have to initialize your controller with that style. Something like:
myTVContoller = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
I give you my solution, I am working in "XIB mode", here the code of a subclass of a UITableViewController :
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithStyle:UITableViewStyleGrouped];
return self;
}
Below code Worked for me, I am also using UITableview class
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:UITableViewStyleGrouped];
if (self)
{
}
return self;
}
If you are inheriting UITableViewController, you can just init tableView again.
Objective C:
self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
Swift:
self.tableView = UITableView(frame: CGRect.zero, style: .grouped)
Setting that is not that hard as mentioned in the question. Actually it's pretty simple. Try this on storyboard.
Swift 4+:
let myTableViewController = UITableViewController(style: .grouped)
Swift 4
Using Normal TableView
let tableView = TableView(frame: .zero, style: .grouped)
Using TPKeyboardAvoidingTableView
let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped)
If you create your UITableView in code, you can do the following:
class SettingsVC: UITableViewController {
init() {
if #available(iOS 13.0, *) {
super.init(style: .insetGrouped)
} else {
super.init(nibName: nil, bundle: nil)
}
}
#available(*, unavailable)
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
For set grouped style in ui itself:-Select the TableView then change the "style"(in attribute inspector)) from plain to Grouped.
You can also do this if you want to use it on a subclass you've already created in a separate swift file (probably not 100% correct but works)
override init(style: UITableViewStyle) {
super.init(style: style)
UITableViewStyle.Grouped
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
Now in you appdelegate.swift you can call:
let settingsController = SettingsViewController(style: .Grouped)
You can do this with using storyboard/XIB also
Go To storyboard -> Select your viewController -> Select your table
Select the "Style" property in interface-builder
Select the "Grouped"
Done
If you have one TableView for more tables, and one of this tables is grouped and the another one plain, than you can simulate the plain style with the function from UITableViewDelegate:
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return CGFloat.min
}
swift 4
if you don't want use storyboard, this might be help.
you can add table view and set properties in a closure:
lazy var tableView: UITableView = {
let tableView = UITableView(frame: .zero, style: .grouped)
tableView.backgroundColor = UIColor(named: Palette.secondaryLight.rawValue)
tableView.rowHeight = 68
tableView.separatorStyle = .none
tableView.translatesAutoresizingMaskIntoConstraints = false
return tableView
}()
then add in subview and set constraints.
If you're not using Storyboards and just want a clean, concise way to setup your UITableViewController subclass to use a different tableView style, you can simply override loadView like this:
override func loadView() {
let tableView = UITableView(frame: .zero, style: .grouped)
tableView.delegate = self
tableView.dataSource = self
view = tableView
}
As the documentation says:
loadView creates the view that the controller manages
it's a method you can ovveride when using ViewControllers whose views are not defined via Storyboards or NIBs.
The UITableViewController implementation already overrides this method for you to crate a simple, plain UITableView as the root view for the controller, but nothing stops you from further overriding it to create a table view that better suits your needs.
Just remember:
Your custom implementation of this method should not call super.
You can also try to make the separator line color clear which could give the grouped style effect:
[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];
You can use:
(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}
self.tableView.style = UITableViewStyleGrouped
EDIT:
Had assumed this was a read/write property. In that case, you can either follow Dimitris advice and set the style when you instantiate the controller, or (if you're using a XIB), you can set it via IB.

Resources