所以我正在使用this library,这使得我可以在我向下滚动时压缩的桌面上创建一个栏。现在我使用桥接头将其安装在我的Swift项目中。所以我按照实现指南,将所有代码转换为Swift代码。一切正常,直到我在“配置栏行为”部分遇到问题。
条形行为定义器是知道何时放大/缩小条形的部分,具体取决于您在表格中滚动的距离。所以它使用UITableViewDelegate
(TVD)来做到这一点。但是查看BarBehaviorDefiner的source code,您可以看到它仅实现了UIScrollViewDelegate
。
这就是问题所在。我需要将tableview的委托设置为BLKFlexibleHeightBarBehaviorDefiner类型的对象之一,但它们不是UITableViewDelegate
类型。
self.tableView.delegate = (id<UITableViewDelegate>)myBar.behaviorDefiner;
现在我知道TVD implements SVD是其中的一部分,但我不能将SVD设置为需要TVD的东西。
以下是我尝试过的内容:
将我的表链接为UIScrollView而不是UITableView。代码:
@IBOutlet weak var table: UIScrollView!
/*
* irrelevant code *
*/
headerBar.behaviorDefiner = SquareCashStyleBehaviorDefiner()
table.delegate = headerBar.behaviorDefiner
这会导致条实际压缩,但桌子不会随着条移动。它只是停留在原处,留下了压缩条形的白色空间。
可选择像执行指南中那样进行投射。代码:
@IBOutlet弱var表:UITableView!
/*
* irrelevant code *
*/
headerBar.behaviorDefiner = SquareCashStyleBehaviorDefiner()
table.delegate = headerBar.behaviorDefiner as? UITableViewDelegate
这不会施展它。当我向下滚动表格时,应用程序什么都不做。
强制施放到UITableViewDelegate
。代码:
@IBOutlet弱var表:UITableView!
/*
* irrelevant code *
*/
headerBar.behaviorDefiner = SquareCashStyleBehaviorDefiner()
table.delegate = headerBar.behaviorDefiner as! UITableViewDelegate
这会返回错误could not cast value of type 'UIScrollViewDelegate' to 'UITableViewDelegate'
。
我想这可能是因为我在swift中这样做,但这个错误不应该基于语言?!
答案 0 :(得分:1)
我遇到了这个问题。
您需要编辑BLKDelegateSplitter.h @interface声明。替换为:
@interface BLKDelegateSplitter : NSObject <NSObject, UITableViewDelegate>
来源:https://github.com/bryankeller/BLKFlexibleHeightBar/issues/42
答案 1 :(得分:0)
根据新的repo添加此扩展名以解决此问题。更新
这对我有用。
如果您使用集合视图而不是更改委托
extension BLKFlexibleHeightBarBehaviorDefiner :UITableViewDelegate{
}