当前位置: 首页 > 面试题库 >

在UITextField的开头创建空间

湛同
2023-03-14
问题内容

我想在UITextField的开头保留一些空间,就像这里:向UITextField添加左侧边距
但是我不知道如何用Swift做到这一点。


问题答案:

这就是我现在正在使用的:

斯威夫特4.2

class TextField: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }
}

斯威夫特4

class TextField: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }
}

斯威夫特3:

class TextField: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }
}

我从未设置其他填充,但是您可以进行调整。此类不会处理textfield上的rightView和leftView。如果您希望它得到正确处理,则可以使用类似(objc中的示例,我只需要rightView即可:

- (CGRect)textRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)placeholderRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeWhileEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)adjustRectWithWidthRightView:(CGRect)bounds {
    CGRect paddedRect = bounds;
    paddedRect.size.width -= CGRectGetWidth(self.rightView.frame);

    return paddedRect;
}


 类似资料:
  • 点击“产品”标签中的“函数计算”,进入函数计算工作空间列表页,在创建空间前请先以管理员账号登录生态云,确保有创建空间的权限,点击“创建新空间”,输入名称及描述。

  • 我正在尝试为用户单击按钮时打开的覆盖对话框创建自己的实现。您在下面看到的代码工作得很好,但不是那么漂亮。我正在寻找一个实现,在这个实现中,我不必为我创建的每个对话框创建一个线程。有没有办法做到这一点? 我一直在浏览各种Java源文件,如和,以弄清楚它们做了什么来阻止线程,直到用户关闭对话框,但我没有设法理解它。此外,我尝试了各种代码片段,包括,例如或。 这是它的样子(请注意:覆盖对话框本身不是窗口

  • 我一直试图按照下面链接中的说明来尝试添加一个自动配置的嵌入式MongoDB实例用于Cucumber集成测试。这目前是不起作用的,因为我一直得到一个空的MongoTemplate。我以为@DataMongoTest会自动配置“@AutoWired private MongoTemplate MongoTemplate;”事实不是这样吗?下面是我的代码:

  • 问题内容: 我想做这样的事情: 因此,我想声明一个承诺,可以使用then来解决。但是,此承诺可能会被另一个返回内容的承诺覆盖。以后我想解决诺言是否有内容。这可能吗?我尝试过: 但是,当用户在场时这不起作用。有任何想法吗? 问题答案: 就像Bixi所写的那样,您可以使用将承诺或价值包装到承诺中。如果您传递给的是承诺,则将返回该承诺,否则将创建一个新的承诺,并直接使用您传递的值来解决。类似以下内容:

  • 本文向大家介绍如何在HTML中创建表头?,包括了如何在HTML中创建表头?的使用技巧和注意事项,需要的朋友参考一下 要使用HTML创建表头,请使用<th>…</ th>标记。表标题标签被表行<tr>…</ tr>包围。<tr>标记被<table>标记包围。表格由行和列组成,可以使用一个或多个<tr>,<th>和<td>元素进行设置。使用style属性添加CSS属性,以向表添加边框。 表行由<tr>

  • 问题内容: 是否可以使用PHP的SimpleXML函数从头开始创建XML对象?浏览功能列表,可以通过一种方法将现有的XML字符串导入到一个对象中,然后可以对其进行操作,但是如果我只是想从头开始以编程方式生成XML对象,什么是最好的方法? 我发现您可以使用simplexml_load_string()并传入所需的根字符串,然后您就可以通过添加子代来操纵对象……尽管这看起来有点像hack,因为我必须实