Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView中的UIView正在自动更改帧_Ios_Swift_Uitableview_Uiview_Cgrect - Fatal编程技术网

Ios UITableView中的UIView正在自动更改帧

Ios UITableView中的UIView正在自动更改帧,ios,swift,uitableview,uiview,cgrect,Ios,Swift,Uitableview,Uiview,Cgrect,我已将此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

我已将此
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)
ui视图
会自动将帧更改为错误的帧,如您在此屏幕截图中所示。 但是当用户滚动到
UITableVIew
的顶部时,
UIView
会再次自动将其帧更改为右侧帧。 显然,我从未改变代码中的框架


使用约束而不是框架

设置框架调整大小时无法保证。Autolayout允许根据不同的大小类别和位置动态调整视图。检查下面的示例

示例:

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

使用约束而不是框架

设置框架调整大小时无法保证。Autolayout允许根据不同的大小类别和位置动态调整视图。检查下面的示例

示例:

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

我不确定我是否完全理解这个问题。。但是我猜你希望弹出视图遵循第一个屏幕截图中显示的0欧元?如果是这种情况,那么我认为您应该将子视图(viewInfoPlus)添加到viewcell而不是tableview。但是更多关于如何检查viewcontroller的信息会有所帮助(比如,如果这些卡本身就是单元格),是的,这是正确的。如果我将视图添加到viewcell,它可以完全显示。。。它将被裁剪你是否尝试将单元格clipToBounds设置为false?我不确定我是否完全理解这个问题。。但是我猜你希望弹出视图遵循第一个屏幕截图中显示的0欧元?如果是这种情况,那么我认为您应该将子视图(viewInfoPlus)添加到viewcell而不是tableview。但是更多关于如何检查viewcontroller的信息会有所帮助(比如,如果这些卡本身就是单元格),是的,这是正确的。如果我将视图添加到viewcell,它可以完全显示。。。它将被裁剪你是否尝试将单元格clipToBounds设置为false?