【发布时间】:2014-12-01 21:59:40
【问题描述】:
我正在从 xib 创建 UIView 以最终呈现为 UIImage。
UIView 本身具有内部约束,在 IB 中具有足够大的帧大小时可以正常工作。但是,我需要将宽度调整为某些特定内容,并且在从 xib 加载 UIView 后,我不知道如何设置它的宽度。
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil][0];
为了渲染视图,我这样做:
UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
但是,无论我将边界设置为什么,UIView 的大小都与 IB 中的初始大小相同。如何设置 UIView 的大小,以使内部约束能够正确调整大小和呈现?
【问题讨论】:
-
如果您使用自动布局,您可能需要添加一个约束来指定新的宽度(如果有,则删除现有的宽度约束)。如果您使用布局约束,直接设置框架并不总是有效。
-
我尝试以编程方式设置宽度约束,但也没有成功。
-
是否有可能
UIView在帧更改到下一个运行循环后延迟其内部更新?我之前遇到过这个问题,并且在主线程上将后续渲染代码包装在dispatch_async中通常会修复它(但话又说回来,以编程方式设置宽度约束也总是对我有用,所以你可能还有其他原因导致问题)。
标签: ios uiview autolayout xib