从xib加载视图,以及如何更改视图'帧?

时间:2016-06-01 10:24:19

标签: ios xib

我从笔尖加载一个视图,这个视图有几个子视图,位于xib上。 从nib加载此视图后,我尝试使用以下命令更改子视图框架:view.subLabel.frame = CGRectMake()。但是,这不起作用,我不知道为什么。我禁用了xib的autolayout属性,但它也不能正常工作。任何人都知道如何更改从xibs加载的视图框架?谢谢。

init和更改框架的代码如下:

初​​始化: GADNativeContentAdView * adView = [[[NSBundle mainBundle] loadNibNamed:@" loadingContent" owner:nil选项:nil] firstObject];

然后更改框架: adView.logoView.frame = CGRectMake(0,0,50,50);

但这不起作用。

3 个答案:

答案 0 :(得分:0)

如果要更改子视图的大小或位置,则应使用NSAutolayout并使用NSAutoLayoutConstraints。例如,将高度约束声明为属性,将其连接到xib中,并以这种方式更改它:

myHeightConstraint.constant = newValue
UIView.animateWithDuration(duration, animations: {
        self.view.layoutIfNeeded()
})

答案 1 :(得分:0)

user2053760,

使用

实例化视图时
GADNativeContentAdView *adView = [[[NSBundle mainBundle] loadNibNamed:@"loadingContent" owner:nil options:nil] firstObject];

你没有指定它的帧,所以默认情况下它是用frame(0,0,0,0)实例化的。然后,您继续更改此adView中的视图,并将其框架设置为(0,0,50,50)。

如果保存subView的视图大小为(0,0),你如何期望subView可见?

所以首先将父框更改为

adView.frame = CGRectMake(0, 0,50, 50);

然后你可以设置childView的框架,

adView.logoView.frame = CGRectMake(0, 0,50, 50);

答案 2 :(得分:0)

尝试添加代码:

 [view setAutoresizesSubviews:NO];

斯威夫特:

view.autoresizesSubviews = false