2015-07-18 6 views
1

Я изучаю автомасштабирование по коду. Для моей цели обучения я делаю пример приложений, используя автозапуск. В моем примере приложения я решил оставить текстовое поле ниже 20 пунктов с верхней границы. Вот кодAutoLayout программно вызывает проблему в iphone 4

#import "SampleViewController.h" 
@interface SampleViewController(){ 
UITextField *username; 
} 
@end 
@implementation SampleViewController 

- (void)viewDidLoad { 
[super viewDidLoad]; 
self.edgesForExtendedLayout = UIRectEdgeNone; 
[self prepareViews]; 
} 

-(void)prepareViews{ 
    username = [[UITextField alloc]init]; 
    username.placeholder = @"Username"; 
    [username setBorderStyle:UITextBorderStyleRoundedRect]; 
    username.translatesAutoresizingMaskIntoConstraints = NO; 

    [self.view addSubview:username]; 
    [self prepareConstraint]; 
} 
-(void)prepareConstraint{ 
    NSLayoutConstraint *constraint = [NSLayoutConstraint 
         constraintWithItem:username 
         attribute:NSLayoutAttributeCenterX 
         relatedBy:NSLayoutRelationEqual 
         toItem:self.view 
         attribute:NSLayoutAttributeCenterX 
         multiplier:1.0 
         constant:0]; 
    [self.view addConstraint:constraint]; 

     constraint = [NSLayoutConstraint 
         constraintWithItem:username 
         attribute:NSLayoutAttributeWidth 
         relatedBy:NSLayoutRelationEqual 
         toItem:nil 
         attribute:NSLayoutAttributeNotAnAttribute 
         multiplier:1.0 
         constant:250]; 
    [self.view addConstraint:constraint]; 

     constraint = [NSLayoutConstraint 
         constraintWithItem:username 
         attribute:NSLayoutAttributeTopMargin 
         relatedBy:NSLayoutRelationEqual 
         toItem:self.view 
         attribute:NSLayoutAttributeTopMargin 
         multiplier:1.0 
         constant:20]; 
    [self.view addConstraint:constraint]; 
    } 
    @end 

Когда я запускаю этот код на iPhone 4 (IOS 7.1) я получил такой вывод iPhone 4 (iOS 7.1) Затем, когда я запускаю этот код на iPhone 5S (IOS 8.4) я получил выход как это iPhone 5s (iOS 8.4)

Ребята я не знаю, где я делаю mistake.Kindly указывают мне, где я делаю mistake.And я получил это предупреждение, когда я запускаю этот код на iPhone 4 (IOS 7.1).

Невозможно одновременно удовлетворить ограничения. Вероятно, по крайней мере один из ограничений в следующем списке - это тот, который вы не хотите. Попробуйте : (1) посмотрите на каждое ограничение и попытайтесь выяснить, какие вы не ожидаете; (2) найти код, который добавил нежелательное ограничение или ограничений и исправить его. (Примечание: Если вы видите NSAutoresizingMaskLayoutConstraints, что вы не понимаете, обратитесь к документации для свойства UIView translatesAutoresizingMaskIntoConstraints) ( "< NSLayoutConstraint: 0x14dcac70 H: | - (20) - [UITextField: 0x14d955b0] (Имена: '|': UIView: 0x14d9b480)>»)

будет пытаться восстановить разбив ограничение < NSLayoutConstraint: 0x14dcac70 H: | - (20) - [UITextField: 0x14d955b0]
(Названия: '|' : UIView: 0x14d9b480)>

Перерыв на objc_exception_throw, чтобы поймать это в de мудак. Методы в категории UIConstraintBasedLayoutDebugging на UIView , перечисленные в < UIKit/UIView.h> также могут быть полезны.

+0

изменение toitem в 3 contraint от 'я. view' to 'self.topLayoutGuide' и сделать toitem attributr до нижнего –

+0

@Bhavin Я делаю изменения, о чем вы упоминали, после того, как я запустил код в приложении iPhone 4, но он отлично работает в 5 секунд. – Balaji

+0

Что такое журнал этой аварии? –

ответ

3

Это проверяется в 4s и 5s .... вы просто добавить ограничение ширины для просмотра, а затем вы должны применить его к TextField ...

NSLayoutConstraint *constraint = [NSLayoutConstraint 
            constraintWithItem:username 
            attribute:NSLayoutAttributeCenterX 
            relatedBy:NSLayoutRelationEqual 
            toItem:self.view 
            attribute:NSLayoutAttributeCenterX 
            multiplier:1.0 
            constant:0]; 
[self.view addConstraint:constraint]; 

constraint = [NSLayoutConstraint 
       constraintWithItem:username 
       attribute:NSLayoutAttributeWidth 
       relatedBy:NSLayoutRelationEqual 
       toItem:nil 
       attribute:NSLayoutAttributeNotAnAttribute 
       multiplier:1.0 
       constant:250]; 
[username addConstraint:constraint]; 

constraint = [NSLayoutConstraint 
       constraintWithItem:username 
       attribute:NSLayoutAttributeTopMargin 
       relatedBy:NSLayoutRelationEqual 
       toItem:self.topLayoutGuide 
       attribute:NSLayoutAttributeBottom 
       multiplier:1.0 
       constant:20]; 
[self.view addConstraint:constraint]; 
Смежные вопросы