2013-09-05 36 views
3

我正在嘗試重新編寫代碼,以允許我使用xibs來設計自定義UIViews以便在我的項目中重複使用。我創建了一個名爲SlidesView的類,它具有相同名稱的.xib。我已經使用以下IBOutlets進行設置:無法更改代碼中的.xib UI對象的框架

@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文件中正確連接。我也有我想要使用設置所有的初始數據視圖的功能:機身看起來如下:

// 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]; 
     } 
    } 

最後:

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

的「自我... setupUsingCenter」我用下面的代碼加載此的.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對象的框架?另外,爲什麼它允許我改變圖像,但框架似乎是不可編輯的,這是否意味着它必須被初始化?

任何幫助,非常感謝, 謝謝。

回答

17

您確定autolayout.xib上被禁用嗎?我的理解是,當autolayout打開時,您無法編輯幀。

如果是這樣的話,你可以禁用autolayout該特定.xib,或者您也可以constraints工作frame財產

+1

非常感謝您的幫助,讓我瘋狂爲什麼這不起作用! –

+0

我在我的XIB中有一個UIButton,我無法更改它的圖像,即使自動佈局被禁用 –

3

使用自動調整大小可能會造成一些意想不到的行爲也自動調整大小子視圖來代替。

你可以嘗試這樣的事情:

[View setAutoresizingMask:UIViewAutoresizingNone]; 

和:

[View setAutoresizesSubviews:NO]; 

查看是要應用該行爲的UIView。

相關問題