How to set if in swiftui? I want the title to be automatic, but with .large and .inline certain actions were taken.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Made code for example. If you make an incomplete swipe to the previous view, then in case of scrolling, the text of the editor starts to be duplicated with the title. I checked it even without @Environment, but through isActive, which was transmitted, but still this bug. Also, with an incomplete swipe, the buttons stop working. Could someone know the complete NavigationView tutorial to avoid some bugs? I need the title not to jump and the buttons are fine.
struct View1: View {
var body: some View {
NavigationView {
ZStack {
Color.red
NavigationLink("View 2", destination: View2())
}
.navigationBarTitle("Back").navigationBarHidden(true).animation(.default)
}
}
}
struct View2: View {
@State private var texti: String = ""
@Environment(\.presentationMode) var presentationMode
var body: some View {
ZStack {
VStack {
TextEditor(text: $texti)
.padding().onReceive(texti.publisher.collect()) {
self.texti = String($0.prefix(2000))}
}
}
.navigationBarTitle("Your Title")
.navigationBarItems(trailing: HStack { Button(action:{}) {
Text("Ed").foregroundColor(Color(#colorLiteral(red: 0.3647058824, green: 0.6901960784, blue: 0.4588235294, alpha: 1)))
}; Button(action: {}) {
Text("S").foregroundColor(Color(#colorLiteral(red: 0.3647058824, green: 0.6901960784, blue: 0.4588235294, alpha: 1)))
}})
}
}
I used transitions through NavigationLink, but with small swipes, the title and buttons in the navigationbartitle and items freeze. What's the trouble?
@State private var selection: String? = nil
NavigationLink(destination: Help(), tag: "Third", selection: $selection) { EmptyView() }
Button(action: {self.selection = "Third"}, label: {
Text("Help")}
and
@State private var isShowingSettings = false
NavigationLink(destination: Settings(), isActive: $isShowingSettings) { EmptyView() }
.navigationBarItems(trailing: Button(action: {self.isShowingSettings.toggle()}, label: {
Image(systemName: "gear")}
Let me explain the idea. Let's say the text and title comes from the Internet. The text takes up more space than one page shown in the gif. How to make automatic generation of cards to fully fit the text, also taking into account the size of the device (that is, smaller phones will have more cards, because there will be fewer cards). Also, the title must appear once on the first card. The last card may be half empty, if that happens. How can such an algorithm be implemented? Please, help me.
SwiftUI or UIKit is welcome.
I got the answer to my previous question with this code. How can I use it and put it in the text box? I don't know how this is done.
override func viewDidLoad() {
super.viewDidLoad()
let scrollingView = UIScrollView(frame: CGRect(x: CGFloat(20), y: CGFloat(20), width: CGFloat(view.bounds.size.width - 40), height: CGFloat(view.bounds.size.height - 40)))
// we will set the contentSize after determining how many pages get filled with text
//scrollingView.contentSize = CGSize(width: CGFloat((view.bounds.size.width - 20) * pageNumber), height: CGFloat(view.bounds.size.height - 20))
scrollingView.isPagingEnabled = true
view.addSubview(scrollingView)
let textString = "NOW, what I want is, Facts. Teach these boys and girls nothing but Facts. Facts alone are wanted in life. Plant nothing else, and root out everything else. You can only form the minds of reasoning animals upon Facts: nothing else will ever be of any service to them. This is the principle on which I bring up my own children, and this is the principle on which I bring up these children. Stick to Facts, sir!’ The scene was a plain, bare, monotonous vault of a school-room, and the speaker’s square forefinger emphasized his observations by underscoring every sentence with a line on the schoolmaster’s sleeve. The emphasis was helped by the speaker’s square wall of a forehead, which had his eyebrows for its base, while his eyes found commodious cellarage in two dark caves, overshadowed by the wall. The emphasis was helped by the speaker’s mouth, which was wide, thin, and hard set. The emphasis was helped by the speaker’s voice, which was inflexible, dry, and dictatorial. The emphasis was helped by the speaker’s hair, which bristled on the skirts of his bald head, a plantation of firs to keep the wind from its shining surface, all covered with knobs, like the crust of a plum pie, as if the head had scarcely warehouse-room for the hard facts stored inside. The speaker’s obstinate carriage, square coat, square legs, square shoulders,—nay, his very neckcloth, trained to take him by the throat with an unaccommodating grasp, like a stubborn fact, as it was,—all helped the emphasis. ‘In this life, we want nothing but Facts, sir; nothing but Facts!’ The speaker, and the schoolmaster, and the third grown person present, all backed a little, and swept with their eyes the inclined plane of little vessels then and there arranged in order, ready to have imperial gallons of facts poured into them until they were full to the brim."
let textStorage = NSTextStorage(string: textString)
let textLayout = NSLayoutManager()
textStorage.addLayoutManager(textLayout)
textLayout.delegate = self
var r = CGRect(x: 0, y: 0, width: scrollingView.frame.size.width, height: scrollingView.frame.size.height)
var i: Int = 0
// this is what we'll use to track the "progress" of filling the "screens of textviews"
// each time through, we'll get the last Glyph rendered...
// if it's equal to the total number of Glyphs, we know we're done
var lastRenderedGlyph = 0
while lastRenderedGlyph textLayout.numberOfGlyphs {
let textContainer = NSTextContainer(size: scrollingView.frame.size)
textLayout.addTextContainer(textContainer)
let textView = UITextView(frame: r, textContainer: textContainer)
r.origin.x += r.width
textView.font = .systemFont(ofSize: 25)
textView.tag = i
i += 1
scrollingView.addSubview(textView)
// get the last Glyph rendered into the current textContainer
lastRenderedGlyph = NSMaxRange(textLayout.glyphRange(for: textContainer))
}
// use the last textView rect to set contentSize
scrollingView.contentSize = CGSize(width: r.origin.x, height: r.size.height)
print("Actual number of pages =", i)
}