我有使用XIB而没有自动布局的应用程序的问题.我不知道这是否是重要信息.
我有UILabel有两行使用自动换行.在iOS 10中,自动换行正常工作,第一行包含一个单词+特殊字符,例如&符号.例:
然后在iOS 11上,自动换行错误并将放大器放到第二行:
这是有问题的,因为通常在第二行上安装的较长的单词现在未正确显示.知道改变了什么吗?我知道safeArea但它看起来不像是理由.任何想法如何将该&符号移到顶部哪里有足够的空间?
有没有办法(疯狂的黑客欢迎)将当前行作为UITextView的字符串?这将包括自动换行等.例如,在这种情况下:

该方法将返回"堆栈溢出.是不是很好?我",因为这是基于游标的当前行.
它也可以根据光标的位置返回"这是我为之做的测试"或"这么做".我尝试过使用UITextView方法和UITextInput协议.
编辑:
这是我试图使用的代码.我需要找到字符串的原因是为了得到它的长度,所以这就是为什么你会看到基于UI的代码.
NSRange location = self.textView.selectedRange;
NSString *searchString = [self.textView.text substringWithRange:NSMakeRange(0, location)];
CGSize currentStringDimensions = [searchString sizeWithFont:self.textView.font constrainedToSize:CGSizeMake(self.textView.frame.size.width, self.textView.frame.size.height) lineBreakMode:NSLineBreakByWordWrapping];
float numberOfRows = (currentStringDimensions.width/(self.textView.frame.size.width));
float left = (float)(numberOfRows - (int)numberOfRows) * (self.textView.frame.size.width);
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.我认为它可能与包装的单词或不同大小的字符有关,但左边的值不一致或在第一行后关闭.
我正在尝试将 aUILabel中的每一行添加到数组中,但我使用的代码似乎并不十分准确。
func getLinesArrayOfStringInLabel(label:UILabel) -> [String] {
guard let text: NSString = label.text as? NSString else { return [] }
let font:UIFont = label.font
let rect:CGRect = label.frame
let myFont: CTFont = CTFontCreateWithName(font.fontName as CFString, font.pointSize, nil)
let attStr:NSMutableAttributedString = NSMutableAttributedString(string: text as String)
attStr.addAttribute(NSAttributedStringKey.font, value:myFont, range: NSMakeRange(0, attStr.length))
let frameSetter:CTFramesetter = CTFramesetterCreateWithAttributedString(attStr as CFAttributedString)
let path: CGMutablePath = CGMutablePath()
path.addRect(CGRect(x: 0, y: 0, width: rect.size.width, height: 100000))
let frame:CTFrame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, nil)
let lines …Run Code Online (Sandbox Code Playgroud) ios ×3
swift ×2
core-text ×1
ios11 ×1
iphone ×1
uikit ×1
uilabel ×1
uitextfield ×1
uitextinput ×1
uitextview ×1