Comments (13)
Sorry, I'm not working on this. Maybe next month. 😄
from ltmorphinglabel.
Thanks. It's a must have feature. I'll implement it asap.
from ltmorphinglabel.
+1
from ltmorphinglabel.
Is this feature implemented in some other branch or is still in TODO list?
from ltmorphinglabel.
@lexrus That would be nice. Please let me know. Thanks!
from ltmorphinglabel.
Yeah this is a great little project I want to use in my app but can't because of the lack of sizing change. I'm fairly competent, what are people's thoughts on the matter? I tried doing something like
let size: CGSize = (myLabel.text! as String).boundingRectWithSize(
CGSize(width: self.view.frame.size.width, height: 999999.0),
options: NSStringDrawingOptions.UsesLineFragmentOrigin,
attributes: [NSFontAttributeName: self.myLabel.font],
context: nil).size
if (size.width > self.myLabel.bounds.size.width) {
print("Yep")
}
And this works (the code with do with some tweaking); It checks whether the size of the string is larger than the frame to be putting it in. How to change the font until it's small enough to fit is a bit trickier. I tried using a for loop to constantly check but this gets rid of the animation for some reason. Hopefully this speeds up the process ;) and thanks again for making this, really cool project!
Edit: The above is wrong, should be comparing against height with infinite width, not this way round! And what was I thinking with 999999.0 😂
from ltmorphinglabel.
@SunburstEnzo Thank you for your advice.
But how does the OS figure out which FontScale value properly fit in current rect?
I guess we can take the advantage of CoreText which has some great functions to deal with properties of each character of a attributed string. But it'll be a breaking change.
from ltmorphinglabel.
Any progress on this issue?
from ltmorphinglabel.
Forgot about this so gave it another go just now
var size: CGSize = myLabel.text.boundingRectWithSize(CGSize(width: CGFloat.max, height: myLabel.bounds.height), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: myLabel.font], context: nil).size
if (size.width > myLabel.bounds.width) {
print("Yep")
while size.width > myLabel.bounds.width {
myLabel.font = myLabel.font.fontWithSize(myLabel.font.pointSize - 1)
size = myLabel.text.boundingRectWithSize(
CGSize(width: CGFloat.max, height: myLabel.bounds.height),
options: NSStringDrawingOptions.UsesLineFragmentOrigin,
attributes: [NSFontAttributeName: myLabel.font],
context: nil).size
myLabel.setNeedsLayout()
}
}
else {
print("No")
while size.width < myLabel.bounds.width {
myLabel.font = myLabel.font.fontWithSize(myLabel.font.pointSize + 1)
size = myLabel.text.boundingRectWithSize(
CGSize(width: CGFloat.max, height: myLabel.bounds.height),
options: NSStringDrawingOptions.UsesLineFragmentOrigin,
attributes: [NSFontAttributeName: myLabel.font],
context: nil).size
myLabel.setNeedsLayout()
}
}
So what this does is reduce the font size so that it fits inside the label's width. This should get you by for now. It could also be made way more efficient and more Swift like probably.
from ltmorphinglabel.
I'm still waiting that "label.adjustsFontSizeToFitWidth = true" is working with LTMorphingLabel 👯
from ltmorphinglabel.
+1
from ltmorphinglabel.
Okay this is what I ended up temporarily doing.
This doesn't support shrinking space between letters, and doesn't work correctly if you set text anywhere before viewDidLoad. I have only tested it with .Evaporate effect.
//
// ShrinkingLTMortphingLabel.swift
//
import Foundation
import LTMorphingLabel
// LTMorphingLabel doens't support autoshrink natively.
// BUG: https://github.com/lexrus/LTMorphingLabel/issues/14
// Emulate the behaviour manually.
// Will take minimumScaleFactor in consideration.
class ShrinkingLTMortphingLabel: LTMorphingLabel {
// MARK: - Properties
/// Original font for the label before any adjustment took place
var originalFont: UIFont? = nil
/// Trigger font-resize on text change
override var text: String? {
get {
return super.text
}
set {
// You do not want to change the order of next two strings
if newValue != nil {
adjustFontSizeToFitText(newValue!)
}
super.text = newValue
}
}
// MARK: - Init
// Save original font size.
override init(frame: CGRect) {
super.init(frame: frame)
originalFont = font
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
originalFont = font
}
// MARK: - View Lifecycle
override func layoutSubviews() {
super.layoutSubviews()
if text != nil {
adjustFontSizeToFitText(text!)
}
}
// MARK: - Methods
/**
Does the actual adjustment work.
*/
private func adjustFontSizeToFitText(newText: String){
guard adjustsFontSizeToFitWidth, let originalFont = originalFont else { return }
let desiredWidth = getDesiredWidthForText(newText)
if frame.width < desiredWidth {
// The text does not fit!
let scaleFactor = max(frame.width / desiredWidth, minimumScaleFactor)
font = UIFont(name: originalFont.fontName, size: originalFont.pointSize * scaleFactor)
}
else{
// Revert to normal
font = originalFont
}
}
/**
Calculates what the width of the label should be to fit the text.
- parameter text: Text to fit.
*/
private func getDesiredWidthForText(text: String) -> CGFloat {
let size = text.boundingRectWithSize(
CGSize(width: CGFloat.max, height: frame.height),
options: [NSStringDrawingOptions.UsesLineFragmentOrigin],
attributes: [NSFontAttributeName: originalFont!],
context: nil).size
return ceil(size.width)
}
}
from ltmorphinglabel.
+1 ~~~waiting too
from ltmorphinglabel.
Related Issues (20)
- +6000 stars - two lines of instructions HOT 1
- Is there any way to use this in Objective-C?
- Swift Compile Error while adding the lib manually HOT 1
- numberLines modify is invalid? HOT 1
- Float to Int conversion error in LTMorphingLabel.swift HOT 1
- Lags in the animation HOT 7
- how can i use it in flutter HOT 1
- Incomplete display HOT 1
- morphingEffect cannot be found in version 0.0.7 HOT 1
- Wrong System font on iOS 13 beta
- How to export video or LTMorphingLabel insert to a video? HOT 2
- Times New Roman Font on iOS-13 (Xcode-11) HOT 2
- Help!!! Why I got this? Error: this application, or a library it uses, has passed an invalid numeric value (NaN, or not-a-number) to CoreGraphics API and this value is being ignored. Please fix this problem. HOT 1
- Weird spacing before starting animation HOT 2
- How to insert the LTMorphongLabel animation in AVComposition HOT 1
- delegate method morphingDidStart is not being called HOT 2
- Build fails with Carthage and Xcode 12 GM HOT 7
- Xcode12.0 error HOT 2
- Dependency "LTMorphingLabel" has no shared framework schemes
- SwiftUI Label Width
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ltmorphinglabel.