Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS中移动ui元素有没有更快捷的方法?_Ios_Uikit - Fatal编程技术网

在iOS中移动ui元素有没有更快捷的方法?

在iOS中移动ui元素有没有更快捷的方法?,ios,uikit,Ios,Uikit,我发现自己经常这样做: webView.frame = CGRectMake(webView.frame.origin.x, otherView.frame.origin.y + otherView.frame.size.height + 10, webView.frame.size.width, webView.frame.size.height); 显然,这段代码中有很多是重复的。我只是向下移动元素,但我必须创建一个新的CGRect,因为我不能直接访问属性 有没有一种更简单的方法可以在运行

我发现自己经常这样做:

webView.frame = CGRectMake(webView.frame.origin.x, otherView.frame.origin.y + otherView.frame.size.height + 10, webView.frame.size.width, webView.frame.size.height);
显然,这段代码中有很多是重复的。我只是向下移动元素,但我必须创建一个新的CGRect,因为我不能直接访问属性


有没有一种更简单的方法可以在运行时移动我所缺少的元素?

CGRectOffset会有帮助吗


这会有帮助吗


这不是一种完全不同的方式,但如果你问我:

CGRect newRect = webView.frame; newRect.origin.y = otherView.frame.size.height+10; webView.frame = newRect; CGRect newRect=webView.frame; newRect.origin.y=otherView.frame.size.height+10; webView.frame=newRect;
我发现这也更具可读性。在这个特定的示例中,大约减少40%的字符数!:p

这不是一种完全不同的方式,但如果你问我:

CGRect newRect = webView.frame; newRect.origin.y = otherView.frame.size.height+10; webView.frame = newRect; CGRect newRect=webView.frame; newRect.origin.y=otherView.frame.size.height+10; webView.frame=newRect;
我发现这也更具可读性。在这个特定的示例中,大约减少40%的字符数!:P/P>< P>@ WASABII有正确的答案,只要减少代码量,但另一种考虑的方法是在UIVIEW上创建一个类别。以下是一些关于类别的文档:

基本上,类别允许您将功能添加到您不控制的类(甚至是您控制的类)

Xcode 4.2提供了一个模板,用于在“新建文件”对话框下创建类别,因此如果可以,请使用该模板

在这种情况下,您可以使用名为

-(void)moveDownByIncrement:(float)increment
然后按照你喜欢的方式实现移动代码(但真正使用@wasabii的方法)

关于类别,需要记住以下几点:

  • 它们会影响类本身,因此当您向类别添加方法时,它在应用程序范围内可用
  • 如果尚未导入类别标头(在类中或预处理中导入),则尝试调用类别方法时会出现错误(或警告,具体取决于项目设置)
  • 类别是用名称空间定义的,这可能会导致冲突。避免这种情况的最好方法是在您添加的任何方法(以及类别名称本身)前面加上特定于项目的前缀。许多第三方库和开放源码项目在NSData上使用一个名为-(NSString*)base64EncodedString的类别,因此省去您的麻烦,并在您自己的类别中为该方法指定一个前缀
  • 在类别上设置属性或IVAR充其量也很麻烦,值得单独讨论。如果你不知道怎么做,就不要尝试

    @ Wasabii有正确的答案,只要减少代码量,但另一种考虑的方法是在UIVIEW上创建一个类别。以下是一些关于类别的文档:

    基本上,类别允许您将功能添加到您不控制的类(甚至是您控制的类)

    Xcode 4.2提供了一个模板,用于在“新建文件”对话框下创建类别,因此如果可以,请使用该模板

    在这种情况下,您可以使用名为

    -(void)moveDownByIncrement:(float)increment
    
    然后按照你喜欢的方式实现移动代码(但真正使用@wasabii的方法)

    关于类别,需要记住以下几点:

  • 它们会影响类本身,因此当您向类别添加方法时,它在应用程序范围内可用
  • 如果尚未导入类别标头(在类中或预处理中导入),则尝试调用类别方法时会出现错误(或警告,具体取决于项目设置)
  • 类别是用名称空间定义的,这可能会导致冲突。避免这种情况的最好方法是在您添加的任何方法(以及类别名称本身)前面加上特定于项目的前缀。许多第三方库和开放源码项目在NSData上使用一个名为-(NSString*)base64EncodedString的类别,因此省去您的麻烦,并在您自己的类别中为该方法指定一个前缀
  • 在类别上设置属性或IVAR充其量也很麻烦,值得单独讨论。如果你不知道怎么做,就不要尝试