回答
假設你的目標iOS7或以上,你可以使用引入的非常方便的排除路徑與TextKit。
的NSTextContainer
(通過UITextView
的textContainer
屬性訪問)提供了exclusionPaths
屬性,該屬性可以設置爲代表,其中的文字應流周圍區域的一個或多個UIBezierPath
秒。因此,首先你需要確定你不想看到任何文本的矩形(在你的情況下,我猜測時間標籤+一些填充)。請注意,我們需要這個矩形文本視圖的座標系中,所以你可能需要轉換,例如:
CGRect timeLabelRect = [self.timeLabel convertRect:self.timeLabel.bounds toView:self.textView];
CGRect exclusionRect = CGRectInset(timeLabelRect, -10.f, -10.f); // add padding
一旦我們有一個矩形,它只是一個創造,從它的路徑的問題,並將其設置爲文本視圖文本容器上的(唯一)排除路徑:
UIBezierPath *path = [UIBezierPath bezierPathWithRect:exclusionRect];
self.textView.textContainer.exclusionPaths = @[path];
就是這樣!在斯威夫特
完整的示例(從遊樂場,因爲我複製/粘貼它):
// just a plain container view
var container = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 400))
// the text view
var textView = UITextView(frame: CGRect(x: 0, y: 100, width: 300, height: 300))
textView.text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."
container.addSubview(textView)
// a box (representing the time label in your case)
var blueBox = UIView(frame: CGRect(x: 250, y: 100, width: 50, height: 50))
blueBox.backgroundColor = .blueColor()
container.addSubview(blueBox)
在這一點上,它看起來是這樣的:
現在,讓我們只需添加排除路徑:
// configure exclusion path
let blueBoxRect = textView.convertRect(blueBox.bounds, fromView: blueBox)
let path = UIBezierPath(rect: blueBoxRect)
textView.textContainer.exclusionPaths = [path]
添加排除路徑後,它看起來像這樣:
你能告訴我一個例子嗎? – user2565076
我剛剛更新了示例代碼的答案,其中包括Swift中的完整工作示例(從操場複製/粘貼) –
嗯,我可能需要指出,所有好的TextKit東西在'UILabel'上都不可用。但是,通過將'editable'和'selectable'設置爲'NO',您應該可以互換使用'UITextView'來進行純顯示。 –
你必須使用NSAttributedString用於此目的。
NSMutableAttributedString *myAttributedString = [[NSMutableAttributedString alloc] initWithString:@"This is my text bla bla bla bla bla!"];
[myAttributedString addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:14.0]
range:NSMakeRange(startingpoint, length)];
這是其中U可以指定第一行的方式(靜止在長度suppsose 20個charecters)是在14的字體大小,和的其餘部分作爲一個更大的尺寸。
消除類似的功能,爲字符串的其餘部分創建另一個attributesString。 現在將這兩個歸屬字符串合併爲一個歸屬字符串。寫 myLabel.attributedText = myTotalAttributedText
或者你可以通過這個核心文本教程,通過它可以得到這個相同的理想效果Link
好吧,OP不希望在相同的文本中包含(小)時間刺痛,而只是排除這個區域。 –
是的,我回答了,記住這一點,歸屬測試第一部分沒有日期,第二部分也是如此。 –
UILabel *labelDate = [[UILabel alloc]initWithFrame:CGRectMake(_textView1.frame.size.width-100, 0, 100, 30)];
labelDate.text = @"4:32 PM";
[_textView1 addSubview:labelDate];//just added a sample label
代碼放在哪裏 '\ n' 在第一線
int firstlineWidth = _textView1.frame.size.width - labelDate.frame.size.width;
int eachCharWidthSum = 0;
NSMutableString *stringToShow = [[NSMutableString alloc]init];
stringToShow = [_textView1.text mutableCopy];
int previousSpaceCharIndex = 0;
int initialPreviousSpaceCharIndex = 0;
BOOL isNeedNextSpace = NO;
for (int i =0; i<_textView1.text.length; i++)
{
unichar charf = [_textView1.text characterAtIndex:i];
NSString *eachString = [NSString stringWithFormat:@"%c",charf];
CGSize stringSize = [eachString sizeWithFont:_textView1.font];
eachCharWidthSum += stringSize.width;
if ([eachString isEqualToString:@" "])
{
previousSpaceCharIndex = i;
}
int differance = i - previousSpaceCharIndex;
if (firstlineWidth<eachCharWidthSum&&differance<10)
{
[stringToShow insertString:@"\n" atIndex:previousSpaceCharIndex];
break;
}
else if (firstlineWidth<eachCharWidthSum&&differance>10&&isNeedNextSpace==NO)
{
isNeedNextSpace = YES;
initialPreviousSpaceCharIndex = previousSpaceCharIndex;
}
else if (isNeedNextSpace&&initialPreviousSpaceCharIndex!=previousSpaceCharIndex)
{
/*
found new space char
*/
[stringToShow insertString:@"\n" atIndex:previousSpaceCharIndex];
break;
}
}
_textView1.text = stringToShow;
- 1. UITableViewCells的不同高度的標籤改變標籤的寬度
- 2. Flex:標籤導航器中不同標籤的寬度不同
- 3. iOS的多個視圖/標籤具有不同的寬度
- 4. HTML畫布上的第一行寬度不同
- 5. 標籤寬度
- 6. 同一行上的標籤和收音機不能跨越td寬度
- 7. iOS UIScrollView的寬度與約束中設置的寬度不同
- 8. 固定寬度的多行標籤
- 9. 的UIBarButtonItem寬度與兩行標籤
- 10. 爲什麼第二行td與第一行相同寬度
- 11. 對於不同行的同一列不同的寬度
- 12. 使用自動佈局的一組標籤的寬度相同
- 13. 選項標籤的寬度
- 14. 設置標籤的寬度
- 15. 火花標籤的寬度
- 16. Eclipse的標籤寬度不改變
- 17. iOS:給定寬度的預期標籤高度
- 18. 標籤寬度100%
- 19. jQuery標籤寬度
- 20. ActionBar標籤寬度
- 21. JFreeChart標籤寬度
- 22. 同一行上的標籤和文本框+整個寬度上的文本框
- 23. 標籤欄項目有不同的寬度
- 24. 不同寬度的選擇和選項標籤下拉
- 25. 高度和寬度的ActionBar標籤
- 26. 什麼CSS標籤跨度的寬度?
- 27. QML標籤最大寬度和多行
- 28. 如何知道最後一行標籤的寬度?
- 29. 爲標籤設置標籤寬度
- 30. 使用自動佈局,如何讓同一「行」上的兩個標籤在寬度上動態變化(根據每個標籤的寬度進行調整)?
可以使用NSMutableAttributedString設置不同的字體大小。 – user4261201
看來人們可能會誤解你。你在尋找'不同的字體大小'還是'不同的線條長度'? – ULazdins
@ULazdins不同的行長 – user2565076