处理不同iDevice宽度的最佳方法是什么?

时间:2014-09-13 07:50:46

标签: ios8

我想知道是否有人可以在故事板中设计时如何处理不同的设备尺寸。

在绘制视图之前,您是否必须检查设备帧大小?

感谢。

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题。如果您坚持使用框架,则需要在绘制视图之前检查框架大小。你可以采用的一种方法是在你的utils文件中编写一个方法来检查设备,如下所示:

+ (NSString *)getHardwareModel {
    AppDelegate_iPhone *appDelegate_iPhone = (AppDelegate_iPhone *) [[UIApplication sharedApplication] delegate];
    size_t size;
    // get the size of the returned device name
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    // allocate the space to store name
    char *machine = (char*)malloc(size);
    // get the device name
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    // place the name into a NSString
    NSString *platform = [NSString stringWithCString:machine encoding: NSUTF8StringEncoding];
    free(machine);

    appDelegate_iPhone.hardwareModel = platform;

    return platform;
}

一旦我们回到我们正在使用的设备,我们就可以相应地设置框架。所以,如果我想检查说iPhone6设备,我会在我的setFrameSize方法中做这样的事情:

NSString *hardwareVersion = [Utils getHardwareModel];
    NSString *target=@"x86_64";
    NSString *deviceTarget=@"iPhone7,1";
    NSRange range =[hardwareVersion rangeOfString:target ];
    NSRange deviceRange =[hardwareVersion rangeOfString:deviceTarget ];
    NSLog(@"device=%@",hardwareVersion);

    // Setting the frame size for the progress bar


        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
            if (range.location!=NSNotFound ||deviceRange.location!=NSNotFound) {
                float frameSize =  self.view.frame.size.width;
                NSLog(@"Frame width===%f", frameSize);
                self.view.frame = CGRectMake(0, 0, 480, 85);
            }

另一种避免所有这一切的方法是使用自动布局并根据不同的屏幕尺寸设置约束。 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/Introduction/Introduction.html