我有一个UIView子类绘制一个半径变化的圆(具有漂亮的弹性动画).视图决定了圆的大小.
我希望这个UIView子类更改其帧大小以匹配圆半径的动画更改,并且我希望这些更改可以修改连接到视图的任何NSLayoutConstraints(以便限制到圆的边缘的视图将移动为圈调整大小).
我理解半径更改时实现-(CGSize)intrinsicContentSize和调用invalidateIntrinsicContentSize将告诉约束更新,但我无法弄清楚如何动画更改intrinsicContentSize.
invalidateIntrinsicContentSize从[UIView animateWith ...块]中调用只是立即更新布局.
这是否可能,是否有解决方法/更好的方法?
基本上我试图在inputAccessoryView属性中创建一个调整大小的UITextView.
我有一个viewController,方法canBecomeFirstResponder返回true,一个视图我通过自定义类(从XIB获取)实例化.在这个视图中是一个UITextView.
我尝试从该类的内部调整完整的inputAccessoryView.我尝试了几个方面:直接设置框架,尝试使用高度约束.它似乎只调整了一半:
这基本上就是我想要的(有或没有自动布局,但在iOS 7/8 +中工作):
class MessageInputAccessory: UIView, UITextViewDelegate
{
@IBOutlet weak var textView: UITextView!
func textViewDidChange(textView: UITextView)
{
var contentSize = textView.sizeThatFits(CGSizeMake(textView.frame.size.width, CGFloat.max))
self.frame.size.height = contentSize.height + 20
self.textView.reloadInputViews()
}
}
Run Code Online (Sandbox Code Playgroud)
我发现这篇文章:在iOS 8中更改inputAccessoryView的框架.声明正在创建自动创建的约束.问题是,它不会为我创造约束.禁止或启用autolayout(也通过setTranslatesAutoresizingMaskIntoConstraints()).