2013-12-08 227 views
3

我遇到了應用程序屏幕尺寸問題。我關閉了自動佈局,以免弄亂屏幕上的元素。iOS故事板,佈局在4.0英寸屏幕尺寸和3.5英寸屏幕尺寸之間變動笨拙

但現在,當我嘗試創建一個簡單的屏幕像這樣一個3.5英寸的屏幕:

3.5 inch view

但是當我在一個4英寸的屏幕上看到相同的佈局看起來亂七八糟像這樣的間距:

4.0 inchview

我不明白我在做什麼錯在這裏。如何創建一個在3.5英寸和4.0英寸屏幕上看起來相同的屏幕?

謝謝!

回答

4

Autolayout從Xcode 4.x向前邁進了一大步。其中一件事是蘋果公司傾聽了開發者的意見:現在,默認情況下的自動佈局不會產生任何自動約束,而且還會產生。這意味着:當你拉動所有的控件時(在任何時間點你可以很容易地移除所有的限制,回到那個狀態),你有一個完整的靜態佈局(帶有絕對座標)。建議的工作流程是從此一個接一個地添加約束條件。這導致在任何狀態下完全控制開發者方面。

這就是說。 我的建議是:打開自動佈局。然後將所有控件放置到3.5屏幕上的靜態位置。如果你不想支持縱向/橫向或iPhone/iPad,那麼不要添加任何約束。而你已經完成了,因爲適合在3.5屏幕上的靜態佈局也應該在4.0屏幕上工作。

一旦您想要支持具有相同場景的iPad或橫向模式,請逐個添加約束條件。真的行。自動佈局現在是你的朋友(從Xcode 5開始)。相信我。

1

非常常見的問題,我遇到了每個應用程序的這個問題。

你有兩個選擇

  1. 在你的故事板,你可以有從單一的歡迎屏幕視圖 - 控制兩個分支。一個brach將有4in大小的所有控制器,而另一個將有3.5in控制器。以這種方式回顧一下,你正在故事板中爲自己創造雙倍的工作。

這是你如何做到這一點

  • 創建佈局如圖
  • 添加兩個按鈕和模態重視他們的意見。
  • 更改故事板將Segue標識符更改爲每個按鈕的「iphone4」和「iphone5」。
  • 使按鈕真的非常小,1px/1px並隱藏它們。刪除任何默認文字。
  • 添加該代碼

enter image description here enter image description here

在您的* .h

#import <UIKit/UIKit.h> 

@interface v2ViewController : UIViewController 
{ 
    NSTimer *timer1; 
    NSTimer *timer2; 

} 

@property (nonatomic, retain) NSTimer *timer1; 
@property (nonatomic, retain) NSTimer *timer2; 

在你的* .M添加此

@synthesize timer1; 
@synthesize timer2; 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    timer2 = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(moveOn) userInfo:nil repeats:NO]; 

} 

- (IBAction) moveOn 
{ 
    //Now go to the Display Call Page 
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
    { 
     CGSize result = [[UIScreen mainScreen] bounds].size; 
     if(result.height == 480) 
     { 
      // iPhone Classic 
      [self performSegueWithIdentifier:@"iphone4" sender:nil]; 
     } 
     if(result.height == 568) 
     { 
      // iPhone 5 
      [self performSegueWithIdentifier:@"iphone5" sender:nil]; 
     } 
    } 

} 
  • 秒ond選項是添加代碼,將相應地調整所有視圖,按鈕等。您需要將所有內容附加到IBOutLet,然後執行此操作。 (抱歉,但我不知道爲什麼#@!$代碼格式不工作)
  • 如果(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone) { CGSize結果= [[UIScreen mainScreen]界限。尺寸; if(result。height == 480) { // iPhone Classic [weatherBGImageVw setFrame:CGRectMake(0,0,320,480)]; } if(result.height == 568) // iPhone 5 [weatherBGImageVw setFrame:CGRectMake(0,0,320,568)]; } }

    +0

    感謝 - 對於方案二,我會以同樣的確切代碼添加到所有我的控制器?或者對於所有的控制器會有所不同? – Genadinik

    +0

    你能解釋我如何創建兩個分支?這似乎更容易和更可預測。 – Genadinik

    +0

    見上面更新的答案 –

    2

    選擇你的UITableView,然後在Size Inspector中激活所有的自動化箭頭和線條,確保你的tableview是頂視圖(在你的UIViewController視圖中)。 enter image description here

    +0

    我不確定這會解決我的問題。所有的元素轉移,而不僅僅是UITableView – Genadinik

    +0

    感謝您的觀點,我認爲截圖會讓它更清晰 –

    2

    如果你不想處理自動佈局,去你的尺寸檢查和更改自動調整大小,以這樣的:enter image description here