iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   iPhone Apps (https://forum.iculture.nl/f28/iphone/f118/iphone-apps-games/f63/iphone-apps/)
-   -   breedte scherm bij spatiegebruik (https://forum.iculture.nl/f28/iphone/f118/iphone-apps-games/f63/iphone-apps/28198-breedte-scherm-spatiegebruik.html)

rcsmit 09-01-09 01:30

breedte scherm bij spatiegebruik
 
Hallo

Ik heb een kleine website voor gitaartablatuur voor de iPhone. als ik de spaties vervang door & nbsp ; (aanelkaar) dan wordt de paginabreedte niet meer automatisch aangepast aan de iPhone. Ik heb het ook geprobeerd door te vervangen door & #160 ;, maar dat loste het probleem ook niet op.

Als ik die vervanging niet doe, dan blijft de paginabreedte goed. (maar ik zie dan de akkoorden niet boven de juiste woorden staan).

Heeft iemand een idee hoe ik dit goed kan maken?

yTABz


en
yTABz

De code in kwestie
tabs2 = Replace(rs1("tabs"),Chr(13),"<br>" )
if test=1 then
tabs3 = Replace(tabs2," ","&nbsp;" ) 'ZORGT VOOR BUG, VERBREEDT HET SCHERM
else
tabs3 = tabs2
end if

http://img114.imageshack.us/img114/2...0131ui9.th.png

en

http://img151.imageshack.us/img151/2...0141gz3.th.png

Tot slot de header
<head>
<title>yTABz</title>

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;">
<link rel="apple-touch-icon" href="icon.png"/>
<style type="text/css">
<!--
body
{margin:0;padding:0;position:absolute;top:0px;left:0px; font-family: "Courier New";
}

-->
</style>
</head>

rcsmit 18-01-09 21:06

Helaas heeft niemand een antwoord. Het is dan ook een hele specifieke vraag natuurlijk. Weet iemand andere forums (Engels, Frans of Italiaans) waar men dergelijke vragen kan stellen?

Trouwens, de width instellen op 320 of 320px helpt ook niet.

InternetRebel 19-01-09 16:12

Dat de nbsp; de pagina breder maakt is logisch. Dit is de HTML markup voor "No Break Space", ofwel een spatie zonder break, wat in normaal Nederlands weer betekend dat er dan een spatie wordt geplaats zonder dat de HTML rendering de regel omgooit om de pagina in het venster te passen.

Deze code gebruik je voornamelijk in tabellen waarbij je bijvoorbeeld niet wilt dat korte zinnen als een rij losse woorden onder elkaar verschijnen omdat de browser de tabelkolom te smal maakt.

Spaties vervangen door een nbsp waarna de pagina-breedte niet meer wordt aangepast is dus geen bug maar juist precies zoals het hoort! :D

EDIT
Een andere reden om nbsp te gebruiken is bijvoorbeeld omdat je meerdere spaties achter elkaar wilt hebben. Standaard worden meerdere "normale" spaties door een browser namelijk terug gebracht tot slechts één spatie. Dus een normale spatie gebruiken zoals in jouw voorbeeld werkt inderdaad ook niet.



EDIT
Als ik het geod begrijp wil jij eigenlijk de lyrics op één lijn hebben binnen de breedte van de browser met daarboven op de juiste plek de gitaar-tabs? En dat probeer je op te lossen met spaties tussen de tabs totdat deze op dezelfde plek valt als het woord waar het betreffende akkoord moet klinken?

En dat is waarschijnlijk ook de reden waarom je dit probeert met een fixed-width font?


rcsmit 19-01-09 17:28

Bedankt voor je uitvoerige antwoord. Je hebt inderdaad goed begrepen wat mijn bedoeling is. En zoals jij het brengt, is het ook gewoon heel logisch! Fixed font? Dan gaan we(=de browser) niet knoeien met de layout.

Ik moet dus gewoon mijn invoer gaan valideren op te lange regels en zeker mijn uitvoer gaan opmaken, want niet onmogelijk is met een splitcommando ofzo.

InternetRebel 20-01-09 02:52

Citaat:

Oorspronkelijk geplaatst door rcsmit (Bericht 246024)
Fixed font? Dan gaan we(=de browser) niet knoeien met de layout.

Nou, dat stukje bedoelde ik net iets anders dan jij het opvat. ;) Met "fixed font" bedoelde ik eigenlijk een lettertype met een vaste breedte. Ik meen uit je site te kunnen opmaken dat je de tabs op een bepaalde plek boven de lyrics wilt hebben. Als een bepaalde tab op bijvoorbeeld de 20e positie moet staan wil je er 20 spaties voor zetten. Dit werkt alleen goed met een lettertype met vaste breedte omdat bij andere lettertypes niet iedere letter evenveel ruimte innemen en je dus niet met spaties kunt "uitrekenen" waar een letter moet komen.

Worden je pagina's opgebouwd via PHP of is het statisch? Anders zou je wellicht met allerlei berekeningen in PHP kunnen bereiken wat je wilt. Je zou ook ieder woord in een aparte cell in een tabel kunnen zetten en de tabs in een cel erboven. Dan ben je ook niet meer gedwongen om een lettertype met vaste breedte te gebruiken. Alleen zit je dan nog steeds met het probleem wanneer je een regel om wilt gooien naar de volgende.

rcsmit 20-01-09 03:32

Ik gebruik ook Courier New op die site. En ik heb de code nu zo aangepast dat hij automatisch afbreekt na 30 tekens. Het ziet er soms niet zo mooi uit, maar nu staan de akkoorden wel boven de juiste woorden en wordt het scherm niet meer verbreedt wat verplicht scrollen tot gevolg heeft. Nu wordt het dus een kwestie van streng zijn bij de invoer.

De tabs komen uit een memoveld uit een access-database en worden gewoon gekopieerd van internet. Dus elk woord in een aparte cel zetten is een omweg die erg gecompliceerd is, nog gecompliceerder dan de regels afbreken bij de spatie (wat dus de volgende stap wordt om de lelijke afbrekingen te vermijden)

Voor de liefhebber en het archief hieronder de code (in ASP)

PHP-code:

schermbreedte=30
..
..
if 
rs1("tabs")<> "" then
                My_Array1
=split(rs1("tabs"),chr(13))
                    For 
i=0 to UBound(My_Array1)
                        
woord=My_Array1(i)
                        
'response.write woord
                        lengte=len(woord)
                        aantalregel=(lengte/schermbreedte)  '
volgens mij moet dit int (l/szijnnader uit te zoeken
                        
for n=0 to aantalregel
                            start
=(n*schermbreedte)+1
                            tabtemp
=tabtemp Mid (woord,startschermbreedte) & "<BR>"
                        
next
                    next
                    
                    tabtemp
=tabtemp &"<BR>"
                    
tabs3 Replace(tabtemp," ","&nbsp;" 
                    
tabtemp=""
            
end if 


InternetRebel 20-01-09 03:43

O jee, ASP, daar weet ik HELEMAAL niks van. You're on your own! ;)

Maar wat wellicht een mooiere manier van afbreken geeft is om de "teller" te laten beginnen op de positie van de scherm-breedte (jij geeft 30 aan) en deze dan terug te laten lopen tot deze een spatie tegenkomt en DAT als afbreekpunt gebruiken.

Bijvoorbeeld: "It's been seven hours and fifteen days" zet de teller (30) op "... and fift" en dan komt "een days" op de volgende regel. Niet echt fraai. Laat je 'm vanaf positie 30 terugtellen tot een spatie dan kom je netjes uit tot "...and" en dan ga je weet verder.

Jij weet vast beter hoe je zoiets in ASP kunt vertalen.

rcsmit 20-01-09 11:54

Kijk, zoiets was ik al van plan, maar was me nog niet gelukt. Maar zo heel ingewikkeld is het niet, dus het gaat er binnenkort nog wel komen....

koekeloer 21-01-09 01:22

zet er eens een div omheen :

<div style="width:320px;margin:0px;">
jouw code
</div>

libia 21-01-09 11:17

dit vond ik wel een leuke uitdaging! dit is hoe ik het in php heb gedaan:
PHP-code:

<?php
$tekst 
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut sollicitudin placerat tellus. Vestibulum lacinia pharetra libero. Nulla facilisi. Sed congue, nisl vel laoreet lobortis, ante felis venenatis nulla, eget rhoncus ligula ligula ac neque. Sed ullamcorper sollicitudin massa. Proin ultricies dictum arcu. Aenean lobortis rutrum turpis. Morbi sagittis ornare enim. Donec sed nisl. Duis augue. Aliquam erat volutpat. Nunc pretium consequat velit. Pellentesque dolor orci, fermentum ut, dictum eu, molestie ac, justo. Vestibulum imperdiet. Cras eget sapien. Donec consectetur, purus sed facilisis malesuada, elit est vehicula libero, et fermentum ante eros nec urna. Praesent porta suscipit mi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer placerat, massa sit amet pharetra fermentum, pede risus ultrices est, et bibendum tellus dolor et elit. Praesent ac sapien blandit odio sodales accumsan. ";

$len strlen($tekst); //tekens in de tekst
$array str_split($tekst); //de tekens in een array
$lastbr 0//$i van laatste plek waar br is toegevoegt

for($i 0$i $len$i++) //$i heeft als beginwaarde 0, zolang het lager is dan het aantal tekens in de tekst komt er steeds eentje bij
{
    
$toegevoegd false//nog geen br toegevoegt
    
    
if($i % ($lastbr 30) == && $i//als $i delen door 30 een heel getal geeft en $i geen nul is
    
{
        for(
$j $i$j 0$j--)
        {
            if(
$array[$j] == " ")
            {
                
array_splice($array$j1"<br />"); //vervang het item op plaats $j (een spatie dus) door een br
                
$lastbr $j;
                break; 
//stop met verder teruggaan (de binnenste for wordt gestopt)
            
}
        }
    }
}
for(
$i 0$i $len$i++)
{
    echo 
$array[$i];
}
?>

misschien dat je het zelf kunt porten naar asp? ik heb daar namelijk geen verstand van :P

rcsmit 31-01-09 13:02

Het is gelukt!

Hier de code voor de liefhebbers
Code:

if rs1("tabs")<> "" then
                        My_Array1=split(rs1("tabs"),chr(13))
                        For i=0 to UBound(My_Array1)
                            woord= My_Array1(i)
                          if woord<>"" then
                          n=0
                          lengte=len(woord)
                          if lengte<schermbreedte then
                              tabtemp=tabtemp&woord & "<br>"
                          else
                              start=1
                                             
                              do until laatsteregel=1
                                  loper=start+schermbreedte  'loper = 30 schermbreedte=20  'start=1

                                  'response.write "loper:"&loper
                                      if loper>lengte then
                                          loper=lengte
                                      end if
                                      if schermbreedte > (lengte-start) then
                                          tabtemp=tabtemp & Mid (woord,start, (lengte-start+1)) & "<BR>"
                                          laatsteregel=1
                                          exit do
                                      else
                                          for m=loper to (start) step -1
                                     
                                                teken=mid (woord, m,1)
                                                if m=start then 'de loper is aangekomen bij de start zonder een spatie tegengekomen zijn
                                                    telang=1
                                                  gevonden=1
                                                  if positie=0 then positie=loper
                                                    end if
                                                if teken =" " then
                                                    gevonden=1
                                                  if positie=0 then positie=m+1
                                                end if
                                            next   
                                     
                                          end if
                                          tabtemp=tabtemp & Mid (woord,start, (positie-start)) & "<BR>"   
                                          if telang=1 then
                                              start=positie
                                              telang=0
                                          else
                                              start=positie+1
                                          end if
                                          positie=0

                                  loop
                             
                              end if
                              'tabtemp=tabtemp& tabeind & "<BR>"
                              laatsteregel=0
                              positie=0
                          end if  'if woord <>""
                        next
                        tabs3 = Replace(tabtemp," ","&nbsp;" )
                  end if



Alle tijden zijn GMT +2. Het is nu 13:02.