我有一些与帧大小相关的怪异行为,经过数小时尝试不同的事情,我无法修复。这没有任何意义。
我有一个自定义的UIView和一个相关的.xib文件:
ErrorView.swift
import UIKit
class ErrorView: UIView {
@IBOutlet weak var labelErrorTitle: UILabel!
@IBOutlet weak var view: UIView!
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
setupView()
}
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
func setupView() {
NSBundle.mainBundle().loadNibNamed("ErrorView", owner: self, options: nil)
self.addSubview(view)
}
ErrorView.xib(使用推断的大小,标签使用约束居中)
我想将此视图添加到底部的自定义UITableView。我希望它变得纤薄,高度为45,宽度为视图屏幕宽度。我想把它添加到底部。
很简单!!我只是用这样的框架设置尺寸:
class LoadingTableView: UITableView {
var errorView: ErrorView = ErrorView () // Here is the Error View
var errorFrame: CGRect! // The frame (size) I will use
required init(coder aDecoder: NSCoder) {
}
override func awakeFromNib() {
super.awakeFromNib()
// I create the frame here to put the error at the top
errorFrame = CGRectMake(0,0,self.frame.width,45)
// Init the ErrorView
errorView = ErrorView(frame: errorFrame)
// I add the subview to root (I have this rootView created)
rootView?.addSubview(errorView)
}
// This is needed, it updates the size when layout changes
override func layoutSubviews() {
super.layoutSubviews()
// Create the size again
errorFrame = CGRectMake(0,0,self.frame.width,45)
// I update the frame
errorView.frame = frame
}
这应该有效,但事实并非如此。大小很奇怪。它的笔尖大小为320x568。然后它只是移动框架,但尺寸不会改变。
这是伟大的部分。如果我将errorView.frame大小设置为.frame,这是tableView的框架,那么它的工作原理!方向改变和所有!
但是只要我将帧更改为自定义大小,无论awakeFromNib或layoutSubviews中的内容是什么,它都不会开始变得怪异。
为什么它会保持笔尖的大小?为什么如果我把.frame它的工作原理,但自定义尺寸不是吗?看起来我非常接近,这让人感到沮丧。
目标是说tableView.error(" errorCode")然后出现errorView。它适用于所有设备和方向。
答案 0 :(得分:0)
不要将子视图添加到UITableView
,而是使用它的tableFooterView
和tableHeaderView
属性:
替换
rootView?.addSubview(errorView)
使用:
tableFooterView = errorView