无法在代码中更改.xib UI对象的框架

时间:2013-09-05 17:26:07

标签: objective-c xcode initialization frame xib

我正在尝试重新编写代码以允许我使用xib设计自定义UIViews以便在整个项目中重复使用。我创建了一个名为SlidesView的类,它具有相同名称的.xib。我使用以下IBOutlets设置了它:

@property (nonatomic, retain) IBOutlet UIImageView *ivMain;
@property (nonatomic, retain) IBOutlet UILabel *lHeader;
@property (nonatomic, retain) IBOutlet UITextView *tvMain;
@property (nonatomic, retain) IBOutlet UIImageView *ivIcon;

我确保这些都在.xib文件中正确连接。我还有一个函数,我想用它来设置视图的所有初始数据:

- (void)setupUsingCenter:(CGPoint)center mainImage:(UIImage *)mainImage mainText:(NSString *)mainText header:(NSString *)header andIconImage:(UIImage *)iconImage

'setupUsingCenter:self ...'主体如下所示:

// First check for a main image and image icon    
    if (mainImage != nil)
    {
        // Set the image
        [self.ivMain setImage:mainImage];
        [self.ivMain setFrame:CGRectMake(10, 10, 10, 10)];

        // If image icon set that too
        if (iconImage != nil)
        {
            [self.ivIcon setImage:iconImage];
        }
    }

最后我使用以下代码加载.xib:

NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"SlidesView" owner:nil options:nil];

        for (UIView *view in views) {
            if([view isKindOfClass:[SlidesView class]])
            {
                SlidesView *slidesView = (SlidesView *)view;
                [slidesView setupUsingCenter:self.vPlaceholder.center mainImage:slideImage mainText:slideText header:slideTitle andIconImage:slideIcon];
                [slidesView setTextColours:[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f]];
                [self.view addSubview:slidesView];
                self.viewPopup = slidesView;
            }
        }

我已经输入了随机setFrame参数用于测试目的但由于某种原因帧不会改变。但是,ivMain上的图像确实发生了变化。任何人都可以解释我如何更改我的UI对象的框架?另外,为什么它允许我更改图像,但框架看起来不可编辑,这是不是意味着它必须初始化?

非常感谢任何帮助, 感谢。

2 个答案:

答案 0 :(得分:17)

您确定autolayout上的.xib已停用吗?我的理解是,当autolayout开启时,您无法编辑框架。

如果是这种情况,您可以为该特定autolayout停用.xib,也可以使用constraints代替frame属性

答案 1 :(得分:3)

使用自动调整大小可能会导致一些意外行为,也就是自动调整大小的子视图。

您可以尝试这样的事情:

[View setAutoresizingMask:UIViewAutoresizingNone];

[View setAutoresizesSubviews:NO];

查看是您要应用该行为的UIView。