Swift:如何找到UILabel中字母的位置(x,y)?

我试图在labelText中找到一个字母的位置。 Objective C中的代码是

NSRange range = [@"Good,Morning" rangeOfString:@","]; NSString *prefix = [@"Good,Morning" substringToIndex:range.location]; CGSize size = [prefix sizeWithFont:[UIFont systemFontOfSize:18]]; CGPoint p = CGPointMake(size.width, 0); NSLog(@"px: %f",px); NSLog(@"py: %f",py); 

请有人告诉我我们如何在swift中编写上述代码? 我发现计算字符串的范围有点困难。

试试这个代码::

 let range : NSRange = "Good,Morning".rangeOfString(","); let prefix: NSString = "Good,Morning".substringToIndex(range.location); let size: CGSize = prefix.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(18.0)]) let p : CGPoint = CGPointMake(size.width, 0); NSLog("px: %f",px) NSLog("py: %f",py) 

我终于会推荐以下变体:

 extension String { func characterPosition(character: Character, withFont: UIFont = UIFont.systemFontOfSize(18.0)) -> CGPoint? { guard let range = self.rangeOfString(String(character)) else { print("\(character) is missed") return nil } let prefix = self.substringToIndex(range.startIndex) as NSString let size = prefix.sizeWithAttributes([NSFontAttributeName: withFont]) return CGPointMake(size.width, 0) } } 

客户代码:

 let str = "Good,Morning" let p = str.characterPosition(",") 

将此转换为swift只是语法时没有什么改变

 var range: NSRange = "Good,Morning".rangeOfString(",") var prefix: String = "Good,Morning".substringToIndex(range.location) print(prefix) //Good 

查找范围的安全方法是使用if-let语句,因为rangeOfString可能返回nil值。 浏览以下代码:

 if let range = str.rangeOfString(",") { let prefix = str.substringToIndex(range.startIndex) let size: CGSize = prefix.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14.0)]) let p = CGPointMake(size.width, 0) } 

上面的代码给出了结果: 在此处输入图像描述