我有一个标题为“当前团队”的屏幕,下面是一个表格视图,下面是一个带+按钮的文本字段。因此,当用户在UITextField中输入任何数据时,如果用户按下+按钮,数据将添加到UITableView上方
这个打击图像是我当前的屏幕:
现在,我在上面的屏幕上设计并添加了一些约束。现在,当表格视图中没有数据和至少一个数据时,标题和文本字段之间有更多空间。
但我需要的是:
我需要显示如下图像:
我不需要在该标题和文本字段之间显示空格。当表视图中至少有一个数据时,表视图的高度应该增加,文本字段也需要在下面。
我该如何处理:
我确实喜欢这个:
if currentTeams.visibleCells.count == 0 {
tableViewHeight.constant = 5
}
else{
tableViewHeight.constant = 50
}
当前团队=表格视图名称
但它有用,请帮助我。我怎么能这样做?
代码片段:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView.isEqual(currentTeams) {
return teamNames.count
}
return pastTeamNames.count
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 20
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if tableView.isEqual(currentTeams) {
return getCellForRow(indexPath)
}
return getCellForPastTeamsRow(indexPath)
}
答案 0 :(得分:1)
您可以通过在桌面上使用修复UITableviewCell 来实现相同目的。如果您最初没有数据,请使用numberOfRowsInSection
方法return 1
。
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return (<Your Array>.count > 1) ? <Your Array>.count + 1 : 1;
}
此1适用于包含加号的UITextField
和UIButton
的静态单元格。
因此cellForRow
方法将为
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (<Your Array>.count > 1)
{
if (indexPath.row < <Your Array>.count - 1)
{
// Initialize your UITableview cell which you have design to show your list
// Your Code to show the list.
// return your cell
}
if (indexPath.row==<Your Array>.count-1 ) {
// Initialize and return the cell which you have design using UITextField and "Plus" Button
}
}
else
{
// Initialize and return the cell which you have design using UITextField and "Plus" Button
}
您还可以查看示例From Github Here。
答案 1 :(得分:1)
// your table hight constrain.
@IBOutlet var current_team_tablehight: NSLayoutConstraint!
@IBOutlet var playpast_role_table_hight: NSLayoutConstraint!
@IBOutlet var past_team_table_hight: NSLayoutConstraint!
@IBOutlet var certificate_table_hight: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
// put it as 0 for default
current_team_tablehight.constant = 0
certificate_table_hight.constant = 0
past_team_table_hight.constant = 0
playpast_role_table_hight.constant = 0
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(true)
if profileData.FirstName.length > 0 {
// data available for that table then .
currentTeams.reloadData()
current_team_tablehight.constant = currentTeams.contentSize.height + 5;
pastTeams.reloadData()
past_team_table_hight.constant = pastTeams.contentSize.height + 5;
playedTableView.reloadData()
playpast_role_table_hight.constant = playedTableView.contentSize.height + 5;
certificationtableview.reloadData()
certificate_table_hight.constant = certificationtableview.contentSize.height + 5;
}
}
func deleteTeamFromCurrentTeams(sender: UIButton) {
let but = sender
let view = but.superview!
let cell = view.superview as! CurrentTeamsTableViewCell
if let tblView = cell.superview?.superview as? UITableView {
if tblView.isEqual(self.currentTeams) {
let indexPath = currentTeams.indexPathForCell(cell)
teamNames.removeAtIndex((indexPath?.row)!)
currentTeams.reloadData()
if teamNames.count > 0 {
current_team_tablehight.constant = currentTeams.contentSize.height;
}else{
current_team_tablehight.constant = 0;
}
}
else if tblView.isEqual(self.pastTeams) {
let indexPath = pastTeams.indexPathForCell(cell)
pastTeamNames.removeAtIndex((indexPath?.row)!)
pastTeams.reloadData()
if pastTeamNames.count > 0 {
past_team_table_hight.constant = pastTeams.contentSize.height;
}else{
past_team_table_hight.constant = 0;
}
}
else if tblView.isEqual(self.playedTableView) {
let indexPath = playedTableView.indexPathForCell(cell)
playedTeamNames.removeAtIndex((indexPath?.row)!)
playedTableView.reloadData()
if playedTeamNames.count > 0 {
playpast_role_table_hight.constant = playedTableView.contentSize.height;
}else{
playpast_role_table_hight.constant = 0;
}
}
else
{
let indexPath = certificationtableview.indexPathForCell(cell)
ExpTeamNames.removeAtIndex((indexPath?.row)!)
certificationtableview.reloadData()
if ExpTeamNames.count > 0 {
certificate_table_hight.constant = certificationtableview.contentSize.height;
}else{
certificate_table_hight.constant = 0;
}
}
}
self.view .layoutIfNeeded()
self.view .setNeedsLayout()
}
@IBAction func addPastTeamsPressed(sender: AnyObject) {
if pastTeamName.text?.trimWhiteSpace != "" && pastTeamName.text?.trimWhiteSpace != "-" {
pastTeamNames.append(pastTeamName.textVal)
pastTeamName.text = ""
pastTeams.reloadData()
past_team_table_hight.constant = pastTeams.contentSize.height + 5;
}
}
@IBAction func addTeamsPressed(sender: AnyObject) {
if teamName.text?.trimWhiteSpace != "" && teamName.text?.trimWhiteSpace != "-" {
teamNames.append(teamName.textVal)
teamName.text = ""
currentTeams.reloadData()
current_team_tablehight.constant = currentTeams.contentSize.height + 5;
}
}
// for played role
@IBAction func addPlayedTeamsPressed(sender: AnyObject) {
if playedTeam.text?.trimWhiteSpace != "" && playedTeam.text?.trimWhiteSpace != "-" {
playedTeamNames.append(playedTeam.textVal)
playedTeam.text = ""
playedTableView.reloadData()
playpast_role_table_hight.constant = playedTableView.contentSize.height + 5;
}
}
@IBAction func addcertificatecoursePressed(sender: AnyObject) {
if Experience.text?.trimWhiteSpace != "" && Experience.text?.trimWhiteSpace != "-" {
ExpTeamNames.append(Experience.textVal)
Experience.text = ""
certificationtableview.reloadData()
certificate_table_hight.constant = certificationtableview.contentSize.height + 5;
}
}
输出:
答案 2 :(得分:0)
通过将tableView行高设置为UITableViewAutomaticDimension,可以获得动态单元格高度。而且你需要提供估计的高度。所以在你的viewdidload中添加以下代码:
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140 // or your estimated height
然后在tableview单元格中使用autolayout来调整项目和容器高度
答案 3 :(得分:0)
设置你的约束 -
UILabel
用于&#34;当前团队&#34;对superView有一个前导,尾随和顶部约束。UITableView
添加到UILabel
的前导,尾随和顶部以及优先级为250的固定高度,让它最初置于0。UITextField
的前导,尾随,固定高度,顶部添加到UITableView
,并使用>=0
这将允许UITextField
始终贴在UITableView
的底部。
在UITableView
中为UIViewController
身高限制设置一个出口。
现在,如果您可以使用默认的UITableViewCell
高度,那么您的工作就更容易了,否则您将不得不计算每个字符串在单元格内获取的高度并获得该值。在viewDidLoad
更新UITableView
高度限制为 -
//do this after you do the insertion into the tableview
tableViewHeightConstraint.constant = numberOfRows * rowHeight
view.layoutIfNeeded()
每次在UITableView
中添加或删除行时,都必须更新此高度。一旦您的单元格占据整个屏幕,高度约束就会中断,UITextField
将被卡在底部,UITableView
将变为可滚动。
修改:您必须以编程方式重新添加高度限制和 UITableView
停止占用整个屏幕。