我是UIView的子类,无法找到正确的方式来请求/报告其所需的大小.我希望systemLayoutSizeFittingSize
能够做到这一点,但它从未被调用过.布局很简单 - 我将视图顶部和顶部固定,并限制尾部和底部小于或等于顶级视图.在所有大小调整函数中,只intrinsicContentSize
调用它,但是那个函数不是很有用.
import Foundation
import UIKit
class StatsView: UIView
{
override func drawRect(rect: CGRect)
{
let context=UIGraphicsGetCurrentContext()!
CGContextSetRGBFillColor(context, 0, 0, 1, 1)
CGContextFillRect(context, rect)
}
override func sizeThatFits(size: CGSize) -> CGSize
{
print("Called sizeThatFits with \(size)")
if(size.width>350)
{
return CGSize(width: 350,height: 50)
}
else
{
return CGSize(width: 50,height: 100)
}
}
override func systemLayoutSizeFittingSize(size: CGSize) -> CGSize
{
print("Called systemLayoutSizeFittingSize with \(size)")
return super.systemLayoutSizeFittingSize(size)
}
override func systemLayoutSizeFittingSize(size: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize
{
print("Called systemLayoutSizeFittingSize with \(size)")
if(size.width>350)
{
return CGSize(width: 350,height: 50)
}
else
{
return CGSize(width: 50,height: 100)
}
}
override func intrinsicContentSize() -> CGSize
{
super.intrinsicContentSize()
print("Called intrinsicContentSize")
return CGSize(width: 10,height: 50)
}
}
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
更新我希望我的视图有一些信息,而不仅仅是一个蓝色矩形.有一些"最佳"宽度,但如果视图不能从其父级中获得那么多,则可以通过重新排列信息来补偿使用更多高度.因此,报告常量值intrinsicContentSize
不符合我的需求.
您可以使用intrinsicContentSize
它根据内容报告所需的视图大小.此值可以随着内容的更改而更改,但您需要在调用invalidateIntrinsicContentSize
时进行调用.
这intrinsicContentSize
与superview中的和,以及其他布局约束一起使用contentHuggingPriority
,contentCompressionResistancePriority
以确定实际的布局大小.
在您的情况下,听起来您希望根据视图内容报告理想大小,更改大小并在内容更改时使其无效,并使用布局约束与兄弟视图和父视图压缩(或抵抗)如所须.
归档时间: |
|
查看次数: |
1394 次 |
最近记录: |