UILabel with no word wrapping - ios

I have a UILabel that I want to clip text on a line basis. Or, a label in which it does not wrap unless I discretely pass in a "\n"
Here is code that I am currently working with:
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 20, height: 200))
label.numberOfLines = 0
label.text = "ABCDEFGHIJKLMNOP" + "\n" + "1234567890123456789"
label.lineBreakMode = // None seem to accomplish what I am looking for
So this would have a label with exactly two lines of text, with each line clipping the end of the text.
Is this possible to do without having to a subview for each line?

That's a really interesting requirement you are looking for. Unfortunately, I don't think that natively Apple supports "removing" the option for word wrapping. You will need to use a label for each line, use .byTruncatingTail, and limit the numberOfLines to 1 (default). Don't use 0 (From apple's quick help: "To remove any maximum limit, and use as many lines as needed, set the value of this property to 0").
You might find some third party code through CocoaPods/etc. to help expedite it.

I think you should do this:
Note: Swift 3 Code.
let label = UILabel(frame: CGRect(x: 0, y: 100, width: 20, height: CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
label.text = "ABCDEFGHIJKLMNOP" + "1234567890123456789"
label.sizeToFit()
view.addSubview(label)
The output should be similar to:
Hope that is the general solution for your case.

Related

How to write underscores with spaces between them?

This is how I define my mask in code:
and this is how it looks with prefix +48. Why there is no space between characters? Is it something wrong with my character? It doesn't matter what font I use... it is always the same.
It doesnt matter what font I use...
Clearly you haven't tried every font. If you type in some underscores in that website, you will find exactly which fonts have underscores that are separated, and which don't. For example, DevanagariSangamMN is a font that does have separated underscores.
let view = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 40))
view.font = UIFont(name: "DevanagariSangamMN", size: 16)
view.text = "___ ___ ___"
PlaygroundPage.current.liveView = view
Of course, the more "proper" way of doing this is to adjust the character spacing, by giving it the characters a positive kern value.
That looks like a UITextField, so you can set its defaultTextAttributes:
yourTextField.defaultTextAttributes = [
NSAttributedString.Key.kern: 2
]

How to force word wrapping of UILabel that adjusts font size and is multiline

The problem I am facing is that UILabel will break line in the middle of the word although I am using word wrapping.
You can create a new project and replace content of view controller to see the result:
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0))
label.center = CGPoint(x: view.frame.midX, y: view.bounds.midY)
label.numberOfLines = 2 // Setting this to 1 produces expected result
label.lineBreakMode = .byWordWrapping
label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.5
view.addSubview(label)
label.text = "Singlewordtext"
label.backgroundColor = .red
}
This produces 2 lines of text which is broken in the middle of the word. The reason this naturally happens is because the word itself is wider than the label itself so it makes sense (I guess). But I would hope that it would use adjustsFontSizeToFitWidth and minimumScaleFactor prior to breaking it. If I set it to single line (label.numberOfLines = 1) I get expected result which is that the text will shrink instead of break. Note that doing so in this case will fit all of the text inside the label.
The question is, is there a configuration on UILabel to prevent line break in such case? Or is there some other elegant solution?
A current result:
Desired result (produced by using label.numberOfLines = 1):
Do note that I still do need to have 2 lines enabled to nicely display for instance label.text = "Three words fit".

Font Size is either 0 or 1 (swift3)

I'm using the OpenSans font in my project but when I adjust its size to a value greater than 1, its size doesn't change. If I set its size with 0, it disappears. I don't understand why it behaves like that. Can anyone explain that to me?
Here is the code:
let RememberMe = UILabel(frame: CGRect(x: checkbox.frame.maxX + view.frame.width*0.05, y: 0, width: ForgetPasswordcontainer.frame.width*0.3, height: ForgetPasswordcontainer.frame.height/2))
RememberMe.text = "Remember Me"
RememberMe.font = UIFont(name: "OpenSans-Regular", size: 1)
RememberMe.textColor = Colors().blue
RememberMe.baselineAdjustment = .alignCenters
RememberMe.adjustsFontSizeToFitWidth = true
RememberMe.textAlignment = .center
ForgetPasswordcontainer.addSubview(RememberMe)
Its not changing because of this line:
RememberMe.adjustsFontSizeToFitWidth = true
No matter what you set the size to, once you get to that line you are once again resizing the font to fit the label that the text is contained in. Either remove that line or change the frame of the label. Also, since it is a custom font you need to be sure that you have registered it in your Info.plist.
Its working for me. Please check :
RememberMe.font = UIFont(name: "Open Sans", size: 10)
And add TTF file to your target.
hey have a look at below code
let RememberMe = UILabel(frame: CGRect(x: 10, y: 50, width: self.view.frame.size.width , height: 100))
RememberMe.text = "Remember Me"
//This add you to selected font and of minimum size which will be adjusted to width itself so no .. appears
RememberMe.font = UIFont(name: "OpenSans-Regular", size: 1000)
RememberMe.textColor = UIColor.blue
RememberMe.baselineAdjustment = .alignCenters
//Need to add this externally if you want to explicitly increase label size
RememberMe.font = UIFont.systemFont(ofSize: 100)
RememberMe.adjustsFontSizeToFitWidth = true
RememberMe.textAlignment = .center
self.view.addSubview(RememberMe)
Output :
1) Must see the frame you provide it and thats correct I think as you are taking this label in other subviews
2) need to provide RememberMe.font = UIFont.systemFont(ofSize: 100) this as to give a size to system Label you are adding as to explicitly increase minimum system font size
Hope it helps

Dynamically adjust width of UILabel in Swift 3

I'm trying to get my UILabel to get wider (along with its border and background color) as the content gets more - and then less when the content is reduced.
Where do I go to get started, I've looked at the Attributes Inspectors and it looks like this can only be done with code (which I'm fine with).
I thought adding two labels in a horizontal stack would do the trick, but it doesn't update in real-time (it will update the label only on launch).
Try using :
myLabel.sizeToFit()
on your label.This should update the label's frame to fit the content.
let label:UILabel = UILabel()
label.textColor=UIColor.black
label.font = UIFont(name: "Halvetica", size: 17)
label.numberOfLines = 1
label.text = "your string"
label.sizeToFit()
label.frame = CGRect(x: 5, y: imageView.frame.height+10, width: label.frame.width, height:label.frame.height)

Using CGFloat.max to size label, moving it

I'm trying to make a label multilines, that fits the screen, so i'm using the CGFloat.max to make it's height dynamic... but using CGFloat.max is causing the label to ignore the positioning, any always keep on the position 0 in the Y axis....
Even passing any variable ou even a number to it, keeps on the 0 in Y axis
Any ideas to fix??
let label: UILabel = UILabel(frame: CGRectMake(10, 50, screenWidthArea, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.text = text
label.sizeToFit()
self.view.addSubview(label)
Actually I've changed CGFloat.max to 0 and it worked well... Still no idea for the reason CGFloat.max locks the label on the top of screen.
let label: UILabel = UILabel(frame: CGRectMake(10, 50, screenWidthArea, 0))

Resources