【问题标题】:load views from xib, and how to change views' frame?从 xib 加载视图,以及如何更改视图的框架?
【发布时间】:2016-09-30 15:53:54
【问题描述】:

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

init和change frame的代码如下:

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

然后换帧: adView.logoView.frame = CGRectMake(0, 0,50, 50);

但这不起作用。

【问题讨论】:

  • 你能把你的初始化代码发布到xib并设置框架吗,这样我们可以帮助你。
  • 初始化:GADNativeContentAdView *adView = [[[NSBundle mainBundle] loadNibNamed:@"loadingContent" owner:nil options:nil] firstObject];然后改变框架: adView.logoView.frame = CGRectMake(0, 0,50, 50);但这不起作用。

标签: ios xib


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    用户2053760,

    当您使用

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

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

    如果包含它的视图本身的大小为 (0,0),您如何期望子视图可见??

    所以先把父框架改成

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

    那么就可以设置childView的frame了,

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

    【讨论】:

      【解决方案3】:

      尝试添加代码:

       [view setAutoresizesSubviews:NO];
      

      斯威夫特:

      view.autoresizesSubviews = false
      

      【讨论】:

        猜你喜欢
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        • 2019-07-04
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        • 2015-05-21
        • 2014-05-05
        相关资源
        最近更新 更多