【问题标题】:UIView in UITableView is changing frame automaticallyUITableView 中的 UIView 正在自动更改框架
【发布时间】:2020-06-03 20:11:39
【问题描述】:

我已将此UIView 添加到我的UITableView

self.tableView.addSubview(viewInfoPlus)
self.viewInfoPlus.frame = CGRect.init(x: kWidth - 193 - 32, y: 751, width: 193, height: 103)

用红色箭头表示的那个。

屏幕截图中的 UIView 具有正确的框架,但是当我尝试重新加载 UITableView 或仅使用一些单元格/单元格时:

let indexPath = IndexPath.init(row: 0, section: TableSection.plus.rawValue)            
UIView.setAnimationsEnabled(false)
self.tableView.beginUpdates()
tableView.reloadRows(at: [indexPath], with: .none)
self.tableView.endUpdates()
UIView.setAnimationsEnabled(true)

UIView 自动将框架更改为错误的框架,如您在此屏幕截图中所见。 但是当用户滚动到UITableVIew 的顶部时,UIView 会自动再次将其框架更改为右侧。 显然我从来没有改变过代码中的框架。

【问题讨论】:

  • 我不确定我是否完全理解了这个问题。但我猜你希望弹出视图跟随第一个屏幕截图中显示的 0€?如果是这种情况,那么我认为您应该 addSubview(viewInfoPlus) 不是 tableview 而是 viewcell 。但是更多关于如何构建视图控制器的信息会有所帮助(比如这些卡片本身就是单元格)
  • 是的,没错。如果我将视图添加到视单元它可以完全显示...它将被裁剪
  • 您是否尝试将单元格 clipToBounds 设置为 false?

标签: ios swift uitableview uiview cgrect


【解决方案1】:

使用约束代替框架

在调整大小时无法保证设置框架。自动布局允许动态调整到不同大小类别和位置的视图。检查以下示例

示例:

viewInfoPlus.translatesAutoresizingMaskIntoConstraints = false
viewInfoPlus.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20).isActive = true
viewInfoPlus.rightAnchor.constraint(equalTo: view.rightAnchor, constant: 20).isActive = true
viewInfoPlus.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
viewInfoPlus.heightAnchor.constraint(equalToConstant: 103).isActive = true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2013-10-24
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2018-02-24
    相关资源
    最近更新 更多