2012-01-07 53 views
13

我有一個UIBarButtonItem,它有一個UITextField作爲它的customView。工具欄包含這個項目和幾個按鈕。使用customView的UIBarButtonItem行爲類似於Flexible-Space項目

當工具欄調整大小時(比如說面向設備的更改),我希望UITextField可以增大或縮小(寬度)以佔據工具欄中的所有可用空間。

不知道工具欄中所有按鈕的組合大小,然後適當地設置UITextField寬度,是否有一種不可思議的方式使此項目的行爲像一個靈活空間欄項目?

回答

2

如果您將UIViewAutoresizingFlexibleWidth設置爲您的文本字段,它應該會自動縮小或增大。

+6

這不會考慮到其他按鈕 - 即長標籤將超過其合理限度... – 2012-06-04 06:14:06

+0

這飛馳的工作爲我的文本字段有按鈕在右邊。乾杯! – Joey 2014-05-15 16:18:41

7

因此,正如我在評論中所寫的,@Krishna_K建議的解決方案並非一直都適用。

由於我寫了自己的方法,想到分享。 它的一部分是基於: Get the width of a UIBarButtonItem

// Expand the status label to fill remaining space 
CGFloat totalItemsWidth = 0.0; 
CGFloat itemsMargin  = 8.0; 
for (UIBarButtonItem *barButtonItem in myToolbar.items) { 
    if (barButtonItem != self.myLabelItem) { 
     // Get width of bar button item (hack from other SO question) 
     UIView *view = [barButtonItem valueForKey:@"view"]; 
     CGFloat width = view? [view frame].size.width : (CGFloat)0.0; 

     totalItemsWidth += width + itemsMargin; 
    } 
} 

self.myLabelItem.width = (myToolbar.frame.size.width - totalItemsWidth) - itemsMargin; 

評論:

  • 不能解釋爲什麼這工作與靈活的空間,但是它的項目通過

  • 公告到UIToolbar是複製不是保留 - 所以你應該總是工作在酒吧項目從噸oolbar本身,而不是你本地的保留對象。

  • 在那裏破解是唯一能夠獲取寬度的東西(嘗試寬度屬性,在延遲後嘗試添加視圖,嘗試讓視圖自行展開)。通常黑客的警告適用...

這就是它的鄉親......

+0

這不可能與靈活的空間UIBarButtonItem一起工作......它沒有視圖。 – 2012-09-19 18:16:23

+0

它可以工作,因爲彈性按鈕的大小爲0,並且當您設置一個項目的大小時,稍後擴展以填充剩餘空隙,該空隙應接近於0.也就是說,如果大小合適,靈活的空間項目將接近0. – 2013-09-20 22:16:03

+0

這對我來說很好,直到iOS 7。 – Nestor 2013-11-22 10:51:15

3

我有一個好UIToolbar子類,我只是寫要做到這一點,得益於俄德的職位代碼。它適用於包含5個項目的工具欄:按鈕,彈性空間,文本框,彈性空間,按鈕。通過覆蓋layoutSubviews,可適當調整UITextField寬度:

@implementation AdaptingTextFieldToolbar 

- (void)layoutSubviews 
{ 
    CGFloat totalItemsWidth = 0.0; 
    CGFloat itemsMargin  = 8.0; 
    UIBarButtonItem *textFieldBarButtonItem; 
    for (UIBarButtonItem *barButtonItem in self.items) { 
     // Get width of bar button item (hack from other SO question) 
     UIView *view = [barButtonItem valueForKey:@"view"]; 
     if(view) { 
      if([view isKindOfClass:[UITextField class]]) { 
       textFieldBarButtonItem = barButtonItem; 
      } else 
      if(view.bounds.size.width > 0) { 
       // Docs say width can be negative for variable size items 
       totalItemsWidth += view.bounds.size.width + itemsMargin; 
      } 
     } 
     totalItemsWidth += itemsMargin; 
    } 

    textFieldBarButtonItem.width = (self.bounds.size.width - totalItemsWidth) - itemsMargin; 
    NSLog(@"WIDTH=%f", textFieldBarButtonItem.width); 

    [super layoutSubviews]; 
} 
@end 
相關問題