override func invalidateIntrinsicContentSize()给出不覆盖错误。删除覆盖与超类错误

时间:2016-09-27 15:40:01

标签: ios swift xcode

我正在使用Apple Tutorial“开始开发iOS应用程序(Swift)” - 使用Xcode 8和Swift 3实现自定义控件。我正在“为按钮大小声明一个常量”部分但是出错.Apple建议我们使用以下代码。

override func intrinsicContentSize() -> CGSize {  
  let buttonSize = Int(frame.size.height)  
  let width = (buttonSize * starCount) + (spacing * (starCount - 1))  

  return CGSize(width: width, height: buttonSize)  
}  

但是,第一个错误(与此问题无关)是在Swift 3中,intrinsicContentSize()已更改为invalidateIntrinsicContentSize()。使用override func invalidateIntrinsicContentSize()后,我收到以下错误。

swift:53:19: Method does not override any method from its superclass  

当我删除覆盖时,我收到以下错误。

53:10: Method 'invalidateIntrinsicContentSize()' with Objective-C selector 
'invalidateIntrinsicContentSize' conflicts with method
'invalidateIntrinsicContentSize()' from superclass 'UIView' with the 
same Objective-C selector 

任何人都可以解释可能出现的问题吗?我可以更改或添加什么来摆脱这个错误?

由于

2 个答案:

答案 0 :(得分:1)

在Swift3中,它已被更改为属性,并且它不可用作方法。您应该覆盖getter以返回所需的大小:

override public var intrinsicContentSize: CGSize {
     return CGSize()//your desired size here
}

请参阅文件IntrinsicContentSize

答案 1 :(得分:0)

在swift中,intrinsicContentSize已更改为存储属性,而不是invalidateIntrinsicContentSize(),因此您应该尝试覆盖var intrinsicContentSize